1. 程式人生 > >搭建高可用spark HA叢集

搭建高可用spark HA叢集

實際生產中會搭建spark ha叢集,本地測試的話整個單機的就行了。這裡我們先介紹下單機如何配置,然後再在他基礎上搭建高可用HA叢集。

單機版配置 : master=weekend01 ,  works = weekend03,weekend04,weekend05

1,下載安裝/spark-x.x.x-bin-hadoopx.x jar包到weekend01上。(不解釋,自己弄一個)

2,   進入conf目錄下重新命名並修改spark-env.sh.template 檔案

  cd conf/
  mv spark-env.sh.template spark-env.sh

  vi spark-env.sh

在該配置檔案中新增如下配置
export JAVA_HOME=/usr/app/jdk1.7.0_xx
export SPARK_MASTER_IP=weekend02或者你的本虛擬機器ip地址
export SPARK_MASTER_PORT=7077
儲存退出
重新命名並修改slaves.template檔案
mv slaves.template slaves
vi slaves
在該檔案中新增子節點所在的位置(Worker節點)

weekend03

weekend04
weekend05
儲存退出
將配置好的Spark拷貝到其他節點上
scp -r spark-xxx-bin-hadoopxx/ weekend02:/usr/app/
scp -r spark-xxx-bin-hadoopxx/ weekend03:/usr/app/

scp -r spark-xxx-bin-hadoopxx/ weekend04:/usr/app/

scp -r spark-xxx-bin-hadoopxx/ weekend05:/usr/app/

3, Spark叢集配置完畢,目前是1個Master,3個Work,在weekend01上啟動Spark叢集
/usr/app/spark-xxx-bin-hadoop2.6/sbin/start-all.sh

啟動後執行jps命令,主節點上有Master程序,其他子節點上有Work進行,登入Spark管理介面檢視叢集狀態(主節點):http://weekend02:8080/

spark HA配置 : master=weekend01,weekend02,  works = weekend03,weekend04,weekend05

Spark叢集安裝完畢,但是有一個很大的問題,那就是Master節點存在單點故障,要解決此問題,就要藉助zookeeper,並且啟動至少兩個Master節點來實現高可靠,配置方式比較簡單:
Spark叢集規劃:weekend01,weekend02是Master;weekend03weekend04weekend05是Worker

安裝配置zk叢集,並啟動zk叢集(之前部落格文件有詳解,自行檢視並配置 ,不解釋)

我們將zk叢集安裝在了 weekend01,weekend02,weekend03 上面

停止spark所有服務,在weekend01上修改配置檔案spark-env.sh,在該配置檔案中刪掉SPARK_MASTER_IP並新增如下配置

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=weekend01,weekend02,weekend03 -Dspark.deploy.zookeeper.dir=/spark"

1.在weekend01節點上修改slaves配置檔案內容指定worker節點

將修改完後的conf資料夾複製到其他機器上面

scp -r conf/ weekend02:/usr/app/spark-xxx-hadoopx.x/conf

scp -r conf/ weekend03:/usr/app/spark-xxx-hadoopx.x/conf

scp -r conf/ weekend04:/usr/app/spark-xxx-hadoopx.x/conf

scp -r conf/ weekend05:/usr/app/spark-xxx-hadoopx.x/conf

Spark叢集配置完畢,目前是1個Master,3個Work,在weekend01上啟動Spark叢集
/usr/app/spark-xxx-bin-hadoopxx/sbin/start-all.sh

然後在weekend02上執行sbin/start-master.sh啟動第二個Master

啟動後執行jps命令,主節點上有Master程序,其他子節點上有Work進行,登入Spark管理介面檢視叢集狀態(主節點):http://weekend01:8080/ 主master alive(你在那個主機啟動star-all.sh命令,那麼該主機即為master(alive)

http://weekend02:8080/ 輔master standby

整完後自己可以測一下spark ha叢集的高可用性,手動kill -9 master(主)程序號, 看看過一會另一臺standby master是否會自動轉變為 alive master 

寫一個spark程式
/usr/app/spark-1.6.1-bin-hadoop2.6/bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://weekend02:7077

--executor-memory 1G\

--total-executor-cores2 \

/usr/app/spark-1.6.1-bin-hadoop2.6/lib/spark-examples-1.6.1-hadoop2.6.0.jar 100

該演算法是利用蒙特·卡羅演算法求PI

在submit命令下 指定類路徑,指定master地址,可選自定義指定記憶體及處理核數量,指定jar包所在位置。 執行取樣次數100,越大越準確

啟動spark shell
/usr/app/spark-1.5.2-bin-hadoop2.6/bin/spark-shell \
--master spark://weekend02:7077 \
--executor-memory 2g \
--total-executor-cores 2
引數說明:
--master spark://node1.itcast.cn:7077 指定Master的地址
--executor-memory 2g 指定每個worker可用記憶體為2G
--total-executor-cores 2 指定整個叢集使用的cup核數為2個
注意:
如果啟動spark shell時沒有指定master地址,但是也可以正常啟動spark shell和執行spark shell中的程式,其實是啟動了spark的local模式,該模式僅在本機啟動一個程序,沒有與叢集建立聯絡。

Spark Shell中已經預設將SparkContext類初始化為物件sc。使用者程式碼如果需要用到,則直接應用sc即可