1. 程式人生 > >Hiveserver2高可用實現

Hiveserver2高可用實現

在生產環境中使用Hive,強烈建議使用HiveServer2來提供服務,好處有:

  • 在應用端不用部署Hadoop和Hive客戶端;
  • 相比hive-cli方式,HiveServer2不用直接將HDFS和Metastore暴漏給使用者;
  • 有安全認證機制,並且支援自定義許可權校驗;
  • 有HA機制,解決應用端的併發和負載均衡問題
  • JDBC方式,可以使用任何語言,方便與應用進行資料互動;
  • 從2.0開始,HiveServer2提供了WEB UI。

Hive從0.14開始,使用Zookeeper實現了HiveServer2的HA功能(ZooKeeperService Discovery),Client端可以通過指定一個nameSpace來連線HiveServer2,而不是指定某一個host和port。

1. hive-site.xml新增配置

<property>
    <name>hive.server2.support.dynamic.service.discovery</name>
    <value>true</value>
</property>
<property>
    <name>hive.server2.zookeeper.namespace</name>
    <value>hiveserver2_zk</value>
</
property> <property> <name>hive.zookeeper.quorum</name> <value>zkNode1:2181,zkNode2:2181,zkNode3:2181</value> </property> <property> <name>hive.zookeeper.client.port</name> <value>2181</value> </property> <
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>

2. Hiveserver2啟動

nohup hive --service hiveserver2 --hiveconf  hive.server2.thrift.port=10001 \ 
--hiveconf hive.metastore.uris='thrift://192.168.1.252:9083,thrift://192.168.1.253:9084' \
--hiveconf hive.server2.zookeeper.namespace=hiveserver2/lenmom--hiveconf hive.log.dir=/hive/logs/server2_10001 \
--hiveconf hive.exec.scratchdir=/user/lenmom/tmpdata &

引數說明:
a) hiveserver2埠:10001 
b) metastore的uri:thrift://192.168.10.34:9083,thrift://192.168.10.35:9084,
c) hiveserver2的輪詢分組名稱空間:hiveserver2/lenmom 
d) 日誌目錄:/hive/logs/server2_10001
e) 臨時檔案目錄:/user/lenmom/tmpdata

3.jdbc連線hive server方式

JDBC Url

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

引數說明
a) <zookeeper quorum> 為Zookeeper的叢集連結串,如zkNode1:2181,zkNode2:2181,zkNode3:2181
b) <dbName> 為Hive資料庫,預設為default
c) serviceDiscoveryMode=zooKeeper 指定模式為zooKeeper
d) zooKeeperNamespace=hiveserver2 指定ZK中的nameSpace,即引數hive.server2.zookeeper.namespace所定義,我定義為hiveserver2_zk

 

4. 客戶端輪詢方式連線

beeline -u "jdbc:hive2://jfhadoop005:9501,jfhadoop006:9501,jfhadoop007:9501/ssjf;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2/lenmom;?mapreduce.job.queuename=root.ssfj" -n lenmom -plenmom -d org.apache.hive.jdbc.HiveDriver

引數說明:
 -u   
   jfhadoop005:9501  三個zk的9501埠,輪詢用
  lenmom   租戶對應的hiveserver庫
serviceDiscoveryMode=zooKeeper;   zk輪詢發現hs2
   zooKeeperNamespace=hiveserver2/lenmom  輪詢的名稱空間,指定輪詢伺服器的範圍  和 hiveserver2的輪詢分組名稱空間對應。
   ?mapreduce.job.queuename=root.lenmom 對照的yarn資源分組佇列
-n   多租戶使用者名稱
-p   多租戶使用者密碼
-d  org.apache.hive.jdbc.HiveDriver hive連線驅動

 

5. 客戶端直連方式連線

beeline -u "jdbc:hive2://192.168.1.252:10000/lenmom" -n  lenmom -p lenmom -d org.apache.hive.jdbc.HiveDriver 

引數說明:
hs2地址和埠:192.168.10.32:10000
lenmom   租戶對應的hiveserver庫
-n   多租戶使用者名稱
-p   多租戶使用者密碼
-d  org.apache.hive.jdbc.HiveDriver hive連線驅動