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
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"
分發到所有節點上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
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
沒有留言:
張貼留言