1. 程式人生 > >hiveserver2的高可用HA

hiveserver2的高可用HA

1. 架構原理介紹

這裡寫圖片描述

這裡最主要的是利用了zk的名稱空間,首先我們把兩個hiserver2先後啟動,註冊到zk叢集的,然後通過zk輪詢做高可用,就是這麼簡單,下邊詳細講解一下,安裝配置

第一步 在兩臺節點上安裝hive,除了配置的ip不同,其他的都相同,並在hive-site.xml中新增如下配置

2.配置


<property>
    <name>spark.deploy.recoveryMode</name>
    <value>ZOOKEEPER</value>
</property>

<!-- 設定hiveserve支援動態 -->
<property> <name>hive.server2.support.dynamic.service.discovery</name> <value>true</value> </property> <!-- 設定hiveserver2的名稱空間 -> <property> <name>hive.server2.zookeeper.namespace</name> <value>hiveserver2_zk</value> </property> <!--設定zk叢集的客戶端地址-->
<property> <name>hive.zookeeper.quorum</name> <value>node5:2181,node4:2181,node3:2181</value> </property> <!--指定zk的埠,這個是否可以去掉,因為上一步已經配置了埠,由於時間關係,我沒有做測試,有興趣可以測試一下-> <property> <name>hive.zookeeper.client.port</name> <value>2181</value> </property> <!-- 指定hive.server2.thrift.bind.host -->
<property> <name>hive.server2.thrift.bind.host</name> <value>0.0.0.0</value> </property> <property> <name>hive.server2.thrift.port</name> <value>10001</value> //兩個HiveServer2例項的埠號要一致 </property>

然後儲存檔案

3. 檢驗是否在zookeeper上註冊

先啟動第一部需要服務高可用的主機上的HiveServer2服務

sh   $HIVE_HOME/bin/hiveserver2

這裡寫圖片描述

再啟動第二部需要服務高可用的主機上的HiveServer2服務

sh   $HIVE_HOME/bin/hiveserver2

這裡寫圖片描述

確認埠是否監聽 netstat -lnp | grep 10000 ,預設埠是10000

4. 測試連線JDBC

JDBC連線的URL規範:

jdbc:hive2://<zookeeper quorum>/<dbName>;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=nameSpace

語法解析

<zookeeper quorum>                     # 為Zookeeper的叢集連結串,如node5:2181,node4:2181,node3:2181
<dbName>                               # 為Hive資料庫(可不填, 預設為default)
serviceDiscoveryMode=zooKeeper         # 指定模式為zooKeeper
zooKeeperNamespace=nameSpace           # 指定ZK中的nameSpace,即引數hive.server2.zookeeper.namespace所定義,在hive-site.sh中定義為hiveserver2_zk

5. beeline連線

測試連線: (1)啟動beeline服務:

sh  $HIVE_HOME/bin/beeline

(2)在beeline中輸入以下連線指令:

!connect jdbc:hive2://node5:2181,node4:2181,node3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk

或者

beeline -u "jdbc:hive2://node5:2181,node4:2181,node3:2181/ding;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk" -nhadoop -phadoop123$
  1. beeline -u就不解釋了
  2. node5:2181,node4:2181,node3:2181 表示zk叢集的連線資訊
  3. ding 表示要連線的hive庫
  4. serviceDiscoveryMode=zooKeeper 表示指定hiveserver連線模式為zookeeper連線
  5. zooKeeperNamespace=hiveserver2_zk指定配置檔案中的名稱空間
  6. -nhadoop 表示當前使用者用hadoop使用者連線beeline
  7. -phadoop123$ 表示當前使用者的密碼(這裡beeline的許可權認證使用的是自定義的許可權控制)

然後進入客戶端進新房操作

(3)如沒使用HiveServer2服務高可用是,則連線beeline使用下列指令:

!connect jdbc:hive2://m1

6. 測試

我們殺了了其中一個hiveserver2,比如hiveserver2-1,然後還可以請求,多次測試可以使用

參考: