Hive从0.14开始,使用Zookeeper实现了HiveServer2的HA功能(ZooKeeper Service Discovery),Client端可以通过指定一个nameSpace来连接HiveServer2,而不是指定某一个host和port。
如果使用HiveServer2的Client并发比较少,可以使用一个HiveServer2实例。
但如果这一个实例挂掉,那么会导致所有的应用连接失败。
如上图,这边准备在node1和node2上分别启用两个HiveServer2的实例,并通过zookeeper完成HA的配置
zookeep已经安装好,并可用。hive单机已经可用。
在两个安装了apache-hive-2.0.0-bin的机器上,分别编辑hive-site.xml,添加以下参数:
数据库的配置记得修改成数据库所在节点的位置。这边数据库安装在node1节点上。
通过hiveserver2 启动后(日志中会出现如下警告,不影响使用)
,查看源码,和配置没有找到出问题的原因。可以通过安装tez消除这个警告。
,在zookeeper中可以看到相关实例。
如果通过beeline jdbc:hive2://
Error: Could not open client transport for any of the Server URI's in ZooKeeper: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hive is not allowed to impersonate hive (state=08S01,code=0
hadoop.proxyuser.hive.groups
hadoop.proxyuser.hive.hosts
其中 hive为启动HiveServer2的用户,然后刷新配置:
yarn rmadmin -refreshSuperUserGroupsConfiguration
hdfs dfsadmin -refreshSuperUserGroupsConfiguration
beeline
!connect jdbc:hive2://node1:2181,node2:2181,node3:2181,node4:2181/userdb;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
select * from employee;
至此,HiveServer2的多实例高可用-Ha配置完成,的确能解决生产中的很多问题,比如:并发、负载均衡、单点故障、安全等等。
因此强烈建议在生产环境中使用该模式来提供Hive服务。