1. 程式人生 > >Spark學習(二)Spark叢集的搭建

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.templateslavespark-env.templatespark-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=自定義的目錄

注意:

  1. 如果CPU是4核8執行緒,那麼這個核是支援超執行緒的核。
  2. 如果是普通的核,一個核在一個時刻只能處理一個執行緒。
  3. 如果節點有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主備切換的過程

在這裡插入圖片描述

  1. 客戶端提交一個AApplication,Master中會儲存各個Worker的資訊,WaitingApps、WaitingDrivers等資訊。
  2. 為了防止Master發生單點故障,丟失元資料,Master會將這些資訊同步至zookeeper的小型檔案系統的目錄中。
  3. 一旦Master掛掉,zookeeper會選取備用Master繼續任務。
  4. 備用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"

解釋:

  1. Dspark.deploy.recoveryMode=ZOOKEEPER代表Spark HA是基於zookeeper。
  2. Dspark.deploy.zookeeper.url=node02:2181,node03:2181,node04:2181代表zookeeper叢集在哪個節點啟動zookeeper叢集在哪個節點啟動**
  3. 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。
node01程序
node02程序
此時Spark監控頁面node02狀態切換至ALIVE狀態,說明主備切換完成。
在這裡插入圖片描述