hiveserver2的高可用HA
阿新 • • 發佈:2018-12-09
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$
beeline -u
就不解釋了node5:2181,node4:2181,node3:2181
表示zk叢集的連線資訊ding
表示要連線的hive庫serviceDiscoveryMode=zooKeeper
表示指定hiveserver連線模式為zookeeper連線zooKeeperNamespace=hiveserver2_zk
指定配置檔案中的名稱空間-nhadoop
表示當前使用者用hadoop使用者連線beeline-phadoop123$
表示當前使用者的密碼(這裡beeline的許可權認證使用的是自定義的許可權控制)
然後進入客戶端進新房操作
(3)如沒使用HiveServer2服務高可用是,則連線beeline使用下列指令:
!connect jdbc:hive2://m1
6. 測試
我們殺了了其中一個hiveserver2,比如hiveserver2-1,然後還可以請求,多次測試可以使用
參考: