hiveserver2 HA

来源:互联网 发布:怎么弄成网络回路 编辑:程序博客网 时间:2024/05/29 13:18

背景介绍:

 大家好,昨日离线集群很多租户包括自己团队反应hive提交任务会卡住,或则几乎登录不上去,我看了一下yarn的资源,资源基本上是空闲的,几乎没有用的,根据我的经验,我猜测可能是hiveserver2服务出问题了,于是直接使用cli(hive命令),试了一下,没问题,此时虽然还没有看日志,但是已经想到hiveserver2服务出问题了,由于是生产环境,没有想太多,赶快重启了hiveserver2服务,然后开始想怎么实现HA高可用,查了一下资料,大概心里有点底了!下面开始介绍hiveserver2 HA

架构原理介绍:


上图是一个简单的架构图,表示一下思路,接下来让我们看一下上图

这里最主要的是利用了zk的命名空间,首先我们把两个hiserver2先后启动,注册到zk集群的,然后通过zk轮询做高可用,就是这么简单,下边详细讲解一下,安装配置

第一步 在两台节点上安装hive,除了配置的ip不同,其他的都相同,并在hive-site.xml中添加如下配置


<!--设置hiveserve支持动态-->

<property>
<name>hive.server2.support.dynamic.service.discovery</name>
<value>true</value>
</property>

<!--设置hiveserver2的命名空间->
<property>
<name>hive.server2.zookeeper.namespace</name>
<value>hiveserver2_zk</value>
</property>

<!--设置zk集群的客户端地址-->
<property>
<name>hive.zookeeper.quorum</name>
<value>node5:2181,node4:2181,node3:2181</value>
</property>

<!--指定zk的端口,这个是否可以去掉,因为上一步已经配置了端口,由于时间关系,我没有做测试,有兴趣可以测试一下->
<property>
<name>hive.zookeeper.client.port</name>
<value>2181</value>
</property>

<!--指定hive.server2.thrift.bind.host-->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>0.0.0.0</value>
</property>

然后保存文件

第二步

启动分别启动两个hiveserver2服务,确认端口是否监听 netstat -lnp | grep 10000 ,默认端口是10000

第三步

查看zk集群是否有了配置文件中的命名空间,确认有了以后

第四步

发起请求,命令如下

beeline -u "jdbc:hive2://node5:2181,node4:2181,node3:2181/ding;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk" -nhadoop -phadoop123$

beeline -u就不解释了

node5:2181,node4:2181,node3:2181表示zk集群的连接信息

ding 表示要连接的hive库

serviceDiscoveryMode=zooKeeper表示指定hiveserver连接模式为zookeeper连接

zooKeeperNamespace=hiveserver2_zk指定配置文件中的命名空间

 -nhadoop 表示当前用户用hadoop用户连接beeline

-phadoop123$ 表示当前用户的密码(这里beeline的权限认证使用的是自定义的权限控制)

然后进入客户端进新房操作

第五部 我们杀了了其中一个hiveserver2,比如hiveserver2-1,然后还可以请求,多次测试可以使用

ok,到这里就介绍完了,特别简单,但是这里还有个问题,目前还不知道怎么解决,如果客户端连接成功,正在执行sql语句的时候,突然客户端连接的hiveserver2挂了,那么正在执行的sql就会终止,目前还没有好的解决思路!










原创粉丝点击