Spark學習(二)Spark叢集的搭建
Spark叢集
一、Spark叢集的四種執行模式
1、Local
單機執行,一般用於開發測試。
2、Yarn
Spark客戶端直接連線Yarn,不需要額外構建Spark叢集。
3、Standalone
構建一個由Master+Worker構成的Spark叢集,Spark執行在叢集中。
4、Mesos
Spark客戶端直接連線Mesos,不需要額外構建Spark叢集。
二、基於Standalone的Spark叢集搭建
1、在node01節點解壓spark-1.6.3-bin-hadoop2.6.tgz安裝包
tar -zxvf spark-1.6.3-bin-hadoop2.6.tgz
2、為了防止spark中的start-all.sh與HDFS中的命令衝突,需要將spark安裝包下sbin目錄中的start-all.sh
修改為start-1.6.3.sh
mv start-all.sh start-1.6.3.sh
3、配置環境變數
export SPARK_HOME=/opt/software/spark-1.6.3 export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin
4、在conf目錄下分別修改slave.template
為slave
,spark-env.template
為spark-env.sh
mv slave.template slave
mv spark-env.template spark-env.sh
5、配置slave檔案,確定Worker所在的節點
node02
node03
node04
6、配置spark-env.sh檔案
#主節點的IP SPARK_MASTER_IP=7077 #主節點的埠號,用來與worker通訊 SPARK_MASTER_PORT=node01 #每一個worker程序所能管理的核數 SPARK_WORKER_CORES=3 #每一個worker程序所能管理的記憶體數 SPARK_WORKER_MEMORY=2G #每個節點啟動worker的例項數 SPARK_WORKER_INSTANCES=1 #worker的工作目錄區 SPARK_WORKER_DIR=自定義的目錄
注意:
- 如果CPU是4核8執行緒,那麼這個核是支援超執行緒的核。
- 如果是普通的核,一個核在一個時刻只能處理一個執行緒。
- 如果節點有8個core,並且支援超執行緒,此時可以將這個節點看成由16個core組成。
7、將配置好的spark安裝包傳送到各個節點上
scp -r spark-1.6.3 [email protected]:`pwd`
scp -r spark-1.6.3 [email protected]:`pwd`
scp -r spark-1.6.3 [email protected]:`pwd`
8、啟動Spark
start-1.6.3.sh
spark介面如下:
9、提交Application到叢集中,顯示如下監控頁面
10、計算結果如下
監控頁面變化
至此,基於standalone的spark叢集搭建完成。
三、Standalone基於zookeeper的高可用Spark叢集搭建
1、Spark HA主備切換的過程
- 客戶端提交一個AApplication,Master中會儲存各個Worker的資訊,WaitingApps、WaitingDrivers等資訊。
- 為了防止Master發生單點故障,丟失元資料,Master會將這些資訊同步至zookeeper的小型檔案系統的目錄中。
- 一旦Master掛掉,zookeeper會選取備用Master繼續任務。
- 備用Master會去zookeeper的檔案系統中拉取元資料,然後基於根據拉來的worker資訊去通知worker易主,此後worker會給備用Master返回心跳。
2、搭建Spark HA
1、切換至/opt/software/spark/spark-1.6.3/conf/
目錄下,在spark叢集的基礎上修改spark-env.sh
配置檔案
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node02:2181,node03:2181,node04:2181 -Dspark.deploy.zookeeper.dir=/spark-1106"
解釋:
- Dspark.deploy.recoveryMode=ZOOKEEPER代表Spark HA是基於zookeeper。
- Dspark.deploy.zookeeper.url=node02:2181,node03:2181,node04:2181代表zookeeper叢集在哪個節點啟動zookeeper叢集在哪個節點啟動**
- Dspark.deploy.zookeeper.dir=/spark-1106zookeeper內部的小型檔案系統的目錄
2、將spark-env.sh
分別傳送給node02、node03、node04節點上。
注意:要將node02的SPARK_MASTER_IP
修改為node02,因為要在node02上啟動備用Master。
3、在node02、node03、node04節點啟動zookeeper
zkServer.sh start
4、在node01節點上啟動Spark
start-1.6.3.sh
5、在node02上啟動Master
start-master.sh
檢視監控頁面,node01對應的Master是ALIVE狀態
node02對應Master是STANDBY狀態
3、測試Spark HA:
為了測試Master是否可以主備切換,現將node01的Master程序kill,然後觀察備用Master是否切換為ALIVE。
此時Spark監控頁面node02狀態切換至ALIVE狀態,說明主備切換完成。