频道栏目
首页 > 网络 > 云计算 > 正文

hiveserver2和zookeeper的HA搭建

2017-09-19 10:04:23         来源:qq_30950329的博客  
收藏   我要投稿

在生产环境中使用Hive,强烈建议使用HiveServer2来提供服务,好处很多:

1. 在应用端不用部署Hadoop和Hive客户端;

2. 相比hive-cli方式,HiveServer2不用直接将HDFS和Metastore暴漏给用户;

3. 有安全认证机制,并且支持自定义权限校验;

4. 有HA机制,解决应用端的并发和负载均衡问题;

5. JDBC方式,可以使用任何语言,方便与应用进行数据交互;

6. 从2.0开始,HiveServer2提供了WEB UI。

如果使用HiveServer2的Client并发比较少,可以使用一个HiveServer2实例,没问题。

\

但如果这一个实例挂掉,那么会导致所有的应用连接失败。

Hive从0.14开始,使用Zookeeper实现了HiveServer2的HA功能(ZooKeeper Service Discovery),Client端可以通过指定一个nameSpace来连接HiveServer2,而不是指定某一个host和port。本文学习和研究HiveServer2的高可用配置。使用的Hive版本为apache-hive-2.0.0-bin。

\

如上图,我准备在node1和node2上分别启用两个HiveServer2的实例,并通过zookeeper完成HA的配置。

Hive配置

注:这里假设你的Zookeeper已经安装好,并可用。

在两个安装了apache-hive-2.0.0-bin的机器上,分别编辑hive-site.xml,添加以下参数:

hive.server2.support.dynamic.service.discovery

true

hive.server2.zookeeper.namespace

hiveserver2_zk

hive.zookeeper.quorum

zkNode1:2181,zkNode2:2181,zkNode3:2181

hive.zookeeper.client.port

2181

hive.server2.thrift.bind.host

0.0.0.0

hive.server2.thrift.port

10001 //两个HiveServer2实例的端口号要一致

先启动第一个HiveServer2 :

cd $HIVE_HOME/bin

./hiveserver2

\

再启动另一个:

\

第二个实例启动后,ZK中可以看到两个都注册上来。

JDBC连接

JDBC连接的URL格式为:

jdbc:hive2:///;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2

其中:

为Zookeeper的集群链接串,如zkNode1:2181,zkNode2:2181,zkNode3:2181

为Hive数据库,默认为default

serviceDiscoveryMode=zooKeeper 指定模式为zooKeeper

zooKeeperNamespace=hiveserver2 指定ZK中的nameSpace,即参数hive.server2.zookeeper.namespace所定义,我定义为hiveserver2_zk

使用beeline测试连接:

cd $HIVE_HOME/bin

./beeline

!connect jdbc:hive2://zkNode1:2181,zkNode2:2181,zkNode3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk liuxiaowen ""

\

可以正常连接。

执行一个HQL查询,日志中显示连接到的HiveServer2实例为Node2,停掉Node2中的HiveServer2实例后,需要重新使用!connect命令连接,之后可以继续正常执行查询,日志显示连接到了Node1中的实例。

关于Hadoop2中的用户权限认证

本例中两个HiveServer2实例均使用普通用户liuxiaowen启动,

刚开始使用beeline链接时候报错:

1.Error:Failedto open newsession:

2.java.lang.RuntimeException:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException):

3.User:liuxiaowen isnotallowed to impersonate liuxiaowen (state=,code=0)

这是由于Hadoop2中的用户权限认证导致的。

参考资料:

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Superusers.html

http://dongxicheng.org/mapreduce-nextgen/hadoop-secure-impersonation/

解决办法:

在Hadoop的core-site.xml中增加配置:

hadoop.proxyuser.liuxiaowen.groups

*

hadoop.proxyuser.liuxiaowen.hosts

*

其中 liuxiaowen 为启动HiveServer2的用户。

使用超级用户hadoop刷新配置:

yarn rmadmin -refreshSuperUserGroupsConfiguration

hdfs dfsadmin -refreshSuperUserGroupsConfiguration

如果是对namenode做过HA,则需要在主备namenode上执行:

hdfs dfsadmin -fs hdfs://cdh5 -refreshSuperUserGroupsConfiguration

之后问题解决,后续再详细研究这块。

至此,HiveServer2的多实例高可用-Ha配置完成,的确能解决生产中的很多问题,比如:并发、负载均衡、单点故障、安全等等。

因此强烈建议在生产环境中使用该模式来提供Hive服务。

上一篇:爬取数据时出现网页报错UnsupportedMimeTypeException
下一篇:spark-RDD
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站