spark sql thriftserver HA

與hue進(jìn)行整合,org.apache.spark.sql.hive.thriftserver,就必須解決thriftserver的單點(diǎn)問題,目前spark還未提供相關(guān)功能,所以必須org.apache.spark.sql.hive.thriftserver修改源碼,實現(xiàn)方式參考HiveServer2高可用方式,詳情參考http://www.itdecent.cn/p/eaf615284f67
修改源碼 /spark2/jars/spark-hive-thriftserver_2.11-xxxx.jar
我們在hue平臺上提價的sql執(zhí)行并行度,是在啟動thriftserver服務(wù)適合指定的
開啟spark動態(tài)資源分配http://lxw1234.com/archives/2015/12/593.htm
cd $SPARK_HOME/sbin/
./start-thriftserver.sh
--master yarn-client
--conf spark.driver.memory=3G
--conf spark.shuffle.service.enabled=true
--conf spark.dynamicAllocation.enabled=true
--conf spark.dynamicAllocation.minExecutors=1
--conf spark.dynamicAllocation.maxExecutors=30
--conf spark.dynamicAllocation.sustainedSchedulerBacklogTimeout=5s

HiveServer2 實現(xiàn)高可用,但是沒有實現(xiàn)故障恢復(fù)

image.png

優(yōu)點(diǎn):
高可用(解決單點(diǎn)問題);
負(fù)載均衡(ZK集群隨機(jī)選擇HiveServer2);
缺點(diǎn):
無法自動故障恢復(fù)(當(dāng)某臺HS2宕機(jī)時,與其相連的client的session會丟失,需要依賴client的自動斷連重試機(jī)制),至于故障重啟,依賴yarn的container故障重試策略,同flink中jobmanager高可用一樣

具體HiveServer2的高可用-HA配置

關(guān)鍵字:hiveserver2、ha、高可用、high availability、ZooKeeper Service Discovery
在生產(chǎn)環(huán)境中使用Hive,強(qiáng)烈建議使用HiveServer2來提供服務(wù),好處很多:

1. 在應(yīng)用端不用部署Hadoop和Hive客戶端;
2. 相比hive-cli方式,HiveServer2不用直接將HDFS和Metastore暴漏給用戶;
3. 有安全認(rèn)證機(jī)制,并且支持自定義權(quán)限校驗;
4. 有HA機(jī)制,解決應(yīng)用端的并發(fā)和負(fù)載均衡問題;
5. JDBC方式,可以使用任何語言,方便與應(yīng)用進(jìn)行數(shù)據(jù)交互;
6. 從2.0開始,HiveServer2提供了WEB UI。

如果使用HiveServer2的Client并發(fā)比較少,可以使用一個HiveServer2實例,沒問題。

hive

但如果這一個實例掛掉,那么會導(dǎo)致所有的應(yīng)用連接失敗。

Hive從0.14開始,使用Zookeeper實現(xiàn)了HiveServer2的HA功能(ZooKeeper Service Discovery),Client端可以通過指定一個nameSpace來連接HiveServer2,而不是指定某一個host和port。本文學(xué)習(xí)和研究HiveServer2的高可用配置。使用的Hive版本為apache-hive-2.0.0-bin。

[圖片上傳中...(image-187c1d-1571111714429-3)]

如上圖,我準(zhǔn)備在node1和node2上分別啟用兩個HiveServer2的實例,并通過zookeeper完成HA的配置。

Hive配置

注:這里假設(shè)你的Zookeeper已經(jīng)安裝好,并可用。

在兩個安裝了apache-hive-2.0.0-bin的機(jī)器上,分別編輯hive-site.xml,添加以下參數(shù):

<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>

先啟動第一個HiveServer2 :

cd $HIVE_HOME/bin

./hiveserver2

hive

再啟動另一個:

hive

第二個實例啟動后,ZK中可以看到兩個都注冊上來。

JDBC連接

JDBC連接的URL格式為:

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

其中:

<zookeeper quorum> 為Zookeeper的集群鏈接串,如zkNode1:2181,zkNode2:2181,zkNode3:2181

<dbName> 為Hive數(shù)據(jù)庫,默認(rèn)為default

serviceDiscoveryMode=zooKeeper 指定模式為zooKeeper

zooKeeperNamespace=hiveserver2 指定ZK中的nameSpace,即參數(shù)hive.server2.zookeeper.namespace所定義,我定義為hiveserver2_zk

使用beeline測試連接:

<pre class="prettyprint linenums" style="padding: 8px; color: rgb(68, 68, 68); border-radius: 2px; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; display: block; margin: 0px 0px 20px; font-size: 14px; line-height: 20px; word-break: break-all; overflow-wrap: break-word; white-space: pre-wrap; background-color: rgb(248, 248, 248); border: 1px solid rgb(238, 238, 238); overflow: hidden; box-shadow: rgb(238, 238, 238) 40px 0px 0px inset, rgb(51, 183, 150) 42px 0px 0px inset;">

  1. cd $HIVE_HOME/bin
  2. ./beeline
  3. !connect jdbc:hive2://zkNode1:2181,zkNode2:2181,zkNode3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk liuxiaowen ""

</pre>

image.png

可以正常連接。

執(zhí)行一個HQL查詢,日志中顯示連接到的HiveServer2實例為Node2,停掉Node2中的HiveServer2實例后,需要重新使用!connect命令連接,之后可以繼續(xù)正常執(zhí)行查詢,日志顯示連接到了Node1中的實例。

作者:
lxw的大數(shù)據(jù)田地 ? HiveServer2的高可用-HA配置

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容