2018年7月20日 星期五

[Spark] master HA

Spark是屬於master-slaves的架構, master有可能因為某些因素導致壞掉而停止工作, 官網有提到幾個master HA的方法, 這篇使用zookeeper進行HA

 Spark master為了保持Alive的狀態, 必須對其設定HA, 當其中一台master crash時另一台可以即時補上, 如何轉換就是透過zookeeper套件, 機器多的話, 隨時保持多台master 在standby的狀態, 盡量有兩台以上, 也建議master不要當成worker避免工作過於繁重, 可以參考此圖

環境 : Ubuntu
步驟 :
1. 建立spark 叢集(內容跳過)

2. 下載zookeeper : 
安裝方式有很多種, 也可以使用docker或其他方式,  建議多用bash指令去做自動化, 這裡使用最簡單的方式說明
# 每台主機都下載
wget http://apache.claz.org/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
# 解壓縮
tar zxf zookeeper-3.4.13.tar.gz
# 移動檔案
mv zookeeper-3.4.13 /usr/local/zookeeper

3. 在zookeeper資料夾中新增兩個資料夾[data],[logs]
4. 在[data]中建立一個文字檔myid內容為0(依此類推其他節點的myid=1,2,3......)

5. 設定zookeeper config, 把zoo_sample.cfg改成zoo.cfg, 加入下列設定檔
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
server.0=master_ip:2888:3888
server.1=worker1_ip:2888:3888
server.2=worker2_ip:2888:3888...以此類推其他節點

6. 修改spark相關配置, 找到spark資料夾下的spark-env.sh, 加入下列設定檔, 並把原本指向的master ip給註解掉
分發到所有節點上export SPARK_DAEMON_JAVA_OPTS="-Dsparl.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master_ip:2181,worker1_ip,worker2_ip......(省略) -Dspark.deploy.zookeeper.dir=/usr/local/zookeeper/data"

7. 把每個節點的zookeeper啟動
/usr/local/zookeeper/bin/zkServer.sh start

8. 選定要當成master的多台主機,  假設要使用master A與master B, 在master A的主機啟動master A與slaves, 並開啟master_A:8080 web UI 確認叢集有無正常啟動
/usr/local/spark/sbin/start-all.sh

9. 切換到其他備用master B的主機, 啟動master B ,並開啟master_B:8080 web UI 看看status是否呈現standby的狀態
/usr/local/spark/sbin/start-master.sh

10. 停掉master A
/usr/local/spark/sbin/stop-master.sh or jps > kill master 

11. 等待1-2分鐘, 等待master B呈現Alive的狀態, 切換期間當有任務正在執行不會受影響, 但有新任務進來時必須等待切換完成

12. bin/spark-submit --master spark://masterA:7077,masterB:7077, 才會自動切過來

簡單的HA機制就完成了

Ref:
https://blog.csdn.net/xummgg/article/details/50759913 

沒有留言:

張貼留言