搭建了一套 cdh 侧测试环境:
刚开始并没有 启用hdfs HA 功能. 运行一段时间, 启用HA 功能后.
impala 报错一些问题:
整理一下:
impala 表 无法读取了 :
原因 : impala 建表的时候, 外部表数据是放在 hdfs 里面的.
hdfs 地址 写的是 name node 的一个ip 如果这个节点刚好是 standby 状态则无法 查询数据.
解决方案:
alter table counter__parquet set location 'hdfs://nameservice1/user/hive/warehouse/counter_parquet' ;
修改一下location 就可以解决问题了.
2. impala 建表 同样的遭遇了这个问题.
报错如下:
ERROR: ImpalaRuntimeException: Error making 'createTable' RPC to Hive Metastore:
CAUSED BY: MetaException: Got exception: org.apache.hadoop.ipc.RemoteException Operation category READ is not supported in state standby. Visit https://s.apache.org/sbnn-error
at org.apache.hadoop.hdfs.server.namenode.ha.StandbyState.checkOperation(StandbyState.java:88)
at org.apache.hadoop.hdfs.server.namenode.NameNode$NameNodeHAContext.checkOperation(NameNode.java:1835)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkOperation(FSNamesystem.java:1515)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:4448)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getFileInfo(NameNodeRpcServer.java:912)
at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getFileInfo(AuthorizationProviderProxyClientProtocol.java:533)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getFileInfo(ClientNamenodeProtocolServerSideTranslatorPB.java:862)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1073)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2281)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2277)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1924)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2275)
解决方案:
是因为 impala 在 hive 的metastore 中 设计到数据库的部分. 这里有个 地址location 也是写的 ip地址.
select * from metastore.dbs ;
修改 里面的 DB_LOCATION_URI 把ip :端口 修改为 nameservice .
有几个部分需要修改的.
hive metastore 库中 DBS 表. 跟数据库相关的.
表相关: sds 表 .
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/133735/viewspace-2685963/,如需转载,请注明出处,否则将追究法律责任。