全部產品
Search
文件中心

E-MapReduce:HiveServer2負載平衡

更新時間:Nov 08, 2024

當E-MapReduce(EMR)叢集中有多個HiveServer2服務時,可以通過Zookeeper服務和Server Load Balancer(Server Load Balancer),實現對HiveServer2的負載平衡,從而將HiveServer2的壓力分散到多個節點上。本文詳細介紹HiveServer2負載平衡的配置及使用方法,請根據EMR叢集(普通叢集和Kerberos叢集)的實際情況進行選擇。

前提條件

已建立高可用叢集,詳情請參見建立叢集HA

使用限制

本文內容僅適用於開啟服務高可用開關的叢集。

EMR普通叢集

以下方式適用於未開啟Kerberos身份認證開關的叢集。

使用Zookeeper實現負載平衡

高可用叢集預設安裝了Zookeeper服務,您可以使用以下串連方式選擇一個HiveServer2進行串連,達到負載平衡的效果。詳細操作如下:

  1. 通過SSH方式串連叢集,詳情請參見登入叢集

  2. 執行以下命令,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實現負載平衡

  1. 建立Server Load Balancer執行個體,詳情請參見建立和管理CLB執行個體

  2. 預設伺服器組中添加EMR叢集HiveServer2服務所在ECS執行個體,根據需要配置ECS的權重。

    詳情請參見在預設伺服器組添加和管理後端伺服器image

  3. 配置TCP連接埠,連接埠自訂,後端協議/連接埠配置為TCP:10000。

    調度演算法請根據需要進行選擇,詳情請參見添加TCP監聽

  4. 訪問HiveServer2。

    1. 通過SSH方式串連叢集,詳情請參見登入叢集

    2. 執行以下命令,即可通過負載平衡的方式串連到叢集中的多個HiveServer2服務。

      beeline -u 'jdbc:hive2://<slb_ip_or_host>:<slb_port>'

      其中,以下參數請根據實際情況替換:

      1. <slb_ip_or_host>:Server Load Balancer執行個體的IP地址或綁定的hostname。

      2. <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實現負載平衡

  1. 首先執行kinit命令,通過Kerberos認證,擷取Kerberos Ticket,詳情請參見使用Kerberos認證

  2. 訪問HiveServer2。

    1. 通過SSH方式串連叢集,詳情請參見登入叢集

    2. 執行以下命令,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,具體請根據實際情況進行修改。

  1. 首先執行kinit命令,通過Kerberos認證,擷取Kerberos Ticket,詳情請參見使用Kerberos認證

  2. 建立121.40.**.**地址對應的Hive Principal並匯出Keytab。

    1. 登入叢集的master-1-1節點,詳情請參見登入叢集

    2. 執行以下命令,進入Kerberos的admin工具。

      kadmin.local
    3. 執行以下命令建立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,執行addprincxst命令即可。

      重要

      多次匯出Kerberos的keytab可能會導致之前的keytab檔案失效。請確保slb.keytab中僅包含最新匯出的Principal。如需再次匯出Principal,請務必先刪除之前產生的keytab檔案。

  3. 執行以下命令,將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
  4. 執行以下命令,查看hive.keytab中的內容。

    klist -kt /etc/taihao-apps/hive-conf/keytab/hive.keytab

    image

  5. 修改叢集的Hive配置。

    在EMR控制台的Hive服務的配置頁簽,搜尋參數hive.server2.authentication.kerberos.principal,修改參數值為hive/121.40.**.**@EMR.**.COM,即修改為上步驟中建立的Principal。然後儲存並生效配置。image

  6. 重啟叢集HiveServer服務。

    1. 在EMR控制台的Hive服務的狀態頁簽,在HiveServer操作列的重啟

    2. 輸入執行原因,單擊確定

    3. 確認對話方塊中,單擊確定

  7. 在master-1-1節點,執行以下命令訪問HiveServer2。

    beeline -u 'jdbc:hive2://121.40.**.**:10000/default;principal=hive/121.40.**.**@EMR.**.COM'