现象

最早Hadoop的NameNode是没有配置HA的,后面配置了HA后发现NameNode发生切换之后表还是不能正常查询了,经过DESCRIBE formatted xxx之后发现,配置过HA之后新建的表的Location仍然是

hdfs://host:8020/user/hive/warehouse/xxx.db/xxx

而不是配置的Nameservice名称

排查

经过排查发现配置HA之后新建的数据库里的表,在发生NameNode切换之后仍然能正常查询,推测可能是跟hive的元数据库有关。

查看hive元数据库里的DBS
hadoop NameNode 配置HA后不生效问题_数据库
果然问题出在这里。

解决办法

将上表里的cdh01:8020 改为NameNodeNameservice名称。
这样是解决了往后新建的表的问题,那么修改之前的表在NameNode发生切换后,还是不能正常读取。
那就要改SDS表中的LOCATION字段里的值了:
hadoop NameNode 配置HA后不生效问题_hive_02
使用如下SQL即可:

UPDATE SDS set LOCATION=REPLACE(LOCATION,'cdh01:8020','nameservice1')