由于hadoop高可用状态切换,导致hive在指定数据库下建立以及读取表失败

Posted cuichunchi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由于hadoop高可用状态切换,导致hive在指定数据库下建立以及读取表失败相关的知识,希望对你有一定的参考价值。

问题描述:因为cdh集群,hadoop启用了HA高可用,之前node1节点为active,现在变成了node2节点为standby。而且之前hive建库的时候,LOCATION=hdfs://node1:8020/user/warehouse/dir.....

导致库里面的表默认都是获取DB的location来拼接的表的hdfs路径。

由于切换成了standby后,读取表的时候,报READ IS NOT

SUPPORT in state standby。就是从机器不允许读写。 

定位:由于配置文件hive-site.xml、core-site.xml、hdfs-site.xml等有关配置文件都替换了最新,都是配置了hdfs://高可用地址/

因为通过hivemetastore去连接创建表,所以排查了日志。在FlieUtils这行显示了不是集群地址的路径。由hivemetastore类去调用了fileutils方法 

于是最后,翻看了hive的源码,在下面看出:

这个方法下面:

进入wh(warehouse类).getTablePath() 

这个地方由含义就知道获取的databasepath的数据库的location。

于是就去查看hive的建库语句

hive>show create database rtp_data;

显示确实是单机的地址

 

解决:

修改库的location地址即可:

alter database <my_db> set location '<new_hdfs_loc>';

 

以上是关于由于hadoop高可用状态切换,导致hive在指定数据库下建立以及读取表失败的主要内容,如果未能解决你的问题,请参考以下文章

hadoop 3.2.x 高可用集群搭建

Hadoop那些事儿---Hive安装与配置

keepalived裂脑导致主备无法切换 #yyds干货盘点#

HADOOP docker:HDFS 高可用原理

Hadoop-HA集群

Hadoop2.x高可用架构