當E-MapReduce(EMR)叢集中有多個HiveServer2服務時,可以通過Zookeeper服務和Server Load Balancer(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實現負載平衡
建立Server Load Balancer執行個體,詳情請參見建立和管理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>:Server Load Balancer執行個體的IP地址或綁定的hostname。<slb_port>:Server Load Balancer執行個體前端監聽的連接埠。
如果您希望Hue能夠通過這個負載平衡與HiveServer2通訊,則需要在Hue配置的hue頁簽中修改以下參數。
參數
描述
hive_server2_host
填寫為Server Load Balancer執行個體的IP地址或綁定的hostname。
hive_server2_port
填寫為Server Load Balancer執行個體前端監聽的連接埠。
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'