现象
最早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
表
果然问题出在这里。
解决办法
将上表里的cdh01:8020
改为NameNode
的Nameservice
名称。
这样是解决了往后新建的表的问题,那么修改之前的表在NameNode发生切换后,还是不能正常读取。
那就要改SDS
表中的LOCATION
字段里的值了:
使用如下SQL即可:
UPDATE SDS set LOCATION=REPLACE(LOCATION,'cdh01:8020','nameservice1')