在CDH5.7下,配置了NameNode的HA后,Hive无正常查询数据了,但是其他的组件HDFS , HBase ,Spark都正常的。
Hive新建表出现如下异常:
CREATE TABLE `x_test`( `client_ip` string , `time` string , `http_request` string , `node_ip` string , `unknow` string , `total_time` string , `dir` string) ;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:java.lang.IllegalArgumentException: java.net.UnknownHostException: nameservice1)
Hive查询会出现如下异常:
hive> select * from tv_log; FAILED: SemanticException Unable to determine if hdfs://nameservice1/user/hive/warehouse/tv.db/tv_log is encrypted: java.lang.IllegalArgumentException:
Wrong FS: hdfs://nameservice1/user/hive/warehouse/tv.db/tv_log, expected: hdfs://master:8020
初步怀疑是Hive元数据的问题,在Hive数据库中有两张表:
DBS : Hive数据仓库的总路径
SDS : Hive每张表对应的路径
数据库中保存了原来的hdfs的路径,修改成HA对应的别名即可。
update DBS set DB_LOCATION_URI=REPLACE (DB_LOCATION_URI,'nameservice1','master:8020'); update SDS set LOCATION=REPLACE (LOCATION,'nameservice1','master:8020');
修改之后,则在hive中可以进行正常的数据查询与建表操作。