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連線驅動