当E-MapReduce(EMR)集群中有多个HiveServer2服务时,可以通过Zookeeper服务和负载均衡SLB(Server Load Balancer),实现对HiveServer2的负载均衡,从而将HiveServer2的压力分散到多个节点上。本文详细介绍HiveServer2负载均衡的配置及使用方法,请根据EMR集群(普通集群和Kerberos集群)的实际情况进行选择。
前提条件
已创建高可用集群,详情请参见创建集群。
使用限制
本文内容仅适用于打开服务高可用开关的集群。
EMR普通集群
以下方式适用于未打开Kerberos身份认证开关的集群。
使用Zookeeper实现负载均衡
高可用集群默认安装了Zookeeper服务,您可以使用以下连接方式选择一个HiveServer2进行连接,达到负载均衡的效果。详细操作如下:
通过SSH方式连接集群,详情请参见登录集群。
执行以下命令,Zookeeper服务会选择一个HiveServer2进行连接。
beeline -u 'jdbc:hive2://master-1-1:2181,master-1-2:2181,master-1-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2'
说明代码中的
master-1-1:2181,master-1-2:2181,master-1-3:2181
为您获取到的Zookeeper的连接地址。为了使Hue能够连接到负载均衡后的HiveServer2,需要在Hue配置的hue页签中添加如下三个自定义参数。
参数
描述
zookeeper.clusters.default.hostports
Zookeeper的连接地址,请根据实际情况填写,本示例为master-1-1:2181,master-1-2:2181,master-1-3:2181。
beeswax.hive_discovery_hs2
固定值为
true
。beeswax.hive_discovery_hiveserver2_znode
固定值为
/hiveserver2
。
使用SLB实现负载均衡
创建负载均衡实例,详情请参见创建和管理CLB实例。
在默认服务器组中添加EMR集群HiveServer2服务所在ECS实例,根据需要配置ECS的权重。
详情请参见在默认服务器组添加和管理后端服务器。
配置TCP端口,端口自定义,后端协议/端口配置为TCP:10000。
调度算法请根据需要进行选择,详情请参见添加TCP监听。
访问HiveServer2。
通过SSH方式连接集群,详情请参见登录集群。
执行以下命令,即可通过负载均衡的方式连接到集群中的多个HiveServer2服务。
beeline -u 'jdbc:hive2://<slb_ip_or_host>:<slb_port>'
其中,以下参数请根据实际情况替换:
<slb_ip_or_host>
:负载均衡实例的IP地址或绑定的hostname。<slb_port>
:负载均衡实例前端监听的端口。
如果您希望Hue能够通过这个负载均衡与HiveServer2通信,则需要在Hue配置的hue页签中修改以下参数。
参数
描述
hive_server2_host
填写为负载均衡实例的IP地址或绑定的hostname。
hive_server2_port
填写为负载均衡实例前端监听的端口。
EMR Kerberos集群
以下方式适用于打开Kerberos身份认证开关的集群。
使用Zookeeper实现负载均衡
首先执行
kinit
命令,通过Kerberos认证,获取Kerberos Ticket,详情请参见使用Kerberos认证。访问HiveServer2。
通过SSH方式连接集群,详情请参见登录集群。
执行以下命令,Zookeeper服务会选择一个HiveServer2进行连接。
beeline -u 'jdbc:hive2://master-1-1:2181,master-1-2:2181,master-1-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2'
说明代码中的
master-1-1:2181,master-1-2:2181,master-1-3:2181
为您获取到的Zookeeper的连接地址。Hue暂不支持连接EMR Kerberos集群的Zookeeper负载均衡的HiveServer2,因此请使用SLB方式访问HiveServer2。
使用SLB实现负载均衡
可以参见EMR普通集群中的内容创建及配置SLB负载均衡。在Kerberos集群,还需要额外配置HiveServer2所使用的Kerberos Principal才能正常连接。
本示例假设SLB的IP地址为121.40.**.**,前端监听端口为10000,具体请根据实际情况进行修改。
首先执行
kinit
命令,通过Kerberos认证,获取Kerberos Ticket,详情请参见使用Kerberos认证。创建121.40.**.**地址对应的Hive Principal并导出Keytab。
登录集群的master-1-1节点,详情请参见登录集群。
执行以下命令,进入Kerberos的admin工具。
kadmin.local
执行以下命令创建Principal,并将其导出到
/tmp/slb.keytab
中。addprinc -randkey hive/121.40.**.** xst -k /tmp/slb.keytab hive/121.40.**.** exit
如果EMR Kerberos集群对接使用的是外部MIT Kerberos,则按照MIT Kerberos开源用法使用kadmin.local或kadmin连接KDC,执行
addprinc
和xst
命令即可。重要多次导出Kerberos的keytab可能会导致之前的keytab文件失效。请确保
slb.keytab
中仅包含最新导出的Principal。如需再次导出Principal,请务必先删除之前生成的keytab文件。
执行以下命令,将
slb.keytab
传输到集群所有HiveServer2服务所在节点,并使用ktutil工具将其内容导入到各个节点的/etc/taihao-apps/hive-conf/keytab/hive.keytab
中。ktutil rkt /tmp/slb.keytab wkt /etc/taihao-apps/hive-conf/keytab/hive.keytab quit
执行以下命令,查看hive.keytab中的内容。
klist -kt /etc/taihao-apps/hive-conf/keytab/hive.keytab
修改集群的Hive配置。
在EMR控制台的Hive服务的配置页签,搜索参数hive.server2.authentication.kerberos.principal,修改参数值为hive/121.40.**.**@EMR.**.COM,即修改为上步骤中创建的Principal。然后保存并生效配置。
重启集群HiveServer服务。
在EMR控制台的Hive服务的状态页签,在HiveServer操作列的重启。
输入执行原因,单击确定。
在确认对话框中,单击确定。
在master-1-1节点,执行以下命令访问HiveServer2。
beeline -u 'jdbc:hive2://121.40.**.**:10000/default;principal=hive/121.40.**.**@EMR.**.COM'