Spark部署

  Spark的部署讓人有點兒困惑,有些須要注意的事項,原本我已經裝成功了YARN模式的,可是發現了一些問題,出現錯誤看日誌信息,徹底看不懂那個錯誤信息,因此纔打算翻譯Standalone的部署的文章。第一部分,我先說一下YARN模式的部署方法。第二部分纔是Standalone的方式。html

  咱們首先看一下Spark的結構圖,和hadoop的差很少。linux

  

 

一、YARN模式

  採用yarn模式的話,其實就是把spark做爲一個客戶端提交做業給YARN,實際運行程序的是YARN,就不須要部署多個節點,部署一個節點就能夠了。git

  把從官網下載的壓縮包在linux下解壓以後,進入它的根目錄,沒有安裝git的,先執行yum install git安裝gitshell

  1)運行這個命令: SPARK_HADOOP_VERSION=2.2.0 SPARK_YARN=true ./sbt/sbt assemblyapache

    就等着吧,它會下載不少jar包啥的,這個過程可能會卡死,卡死的就退出以後,從新執行上面的命令。工具

  2)編輯conf目錄下的spark-env.sh(原來的是.template結尾的,刪掉.template),添加上HADOOP_CONF_DIR參數oop

   HADOOP_CONF_DIR=/etc/hadoop/conf

  3)運行一下demo看看,能出結果 Pi is roughly 3.13794url

   SPARK_JAR=./assembly/target/scala-2.9.3/spark-assembly_2.9.3-0.8.1-incubating-hadoop2.2.0.jar \
    ./spark-class org.apache.spark.deploy.yarn.Client \
      --jar examples/target/scala-2.9.3/spark-examples-assembly-0.8.1-incubating.jar \
      --class org.apache.spark.examples.SparkPi \
      --args yarn-standalone \
      --num-workers 3 \
      --master-memory 1g \
      --worker-memory 1g \
      --worker-cores 1

二、Standalone模式

  下面咱們就講一下怎麼部署Standalone,參考頁面是http://spark.incubator.apache.org/docs/latest/spark-standalone.html。spa

  這裏咱們要一個乾淨的環境,剛解壓出來的,運行以前的命令的時候不能再用了,會報錯的。scala

  1)打開make-distribution.sh,修改SPARK_HADOOP_VERSION=2.2.0,而後執行./make-distribution.sh, 而後會生成一個dist目錄,這個目錄就是咱們要部署的內容。官方推薦是先把master跑起來,再部署別的節點,你們看看bin目錄下面的腳本,和hadoop的差很少的,按照官方文檔的推薦的安裝方式有點兒麻煩。下面咱們先說簡單的方法,再說官方的方式。

  咱們打開dist目錄下conf目錄的,若是沒有slaves文件,添加一個,按照hadoop的那種配置方式,把slave的主機名寫進去,而後把dist目錄部署到各臺機器上,回到master上面,進入第三題、目錄的sbin目錄下,有個start-all.sh,執行它就能夠了。

  下面是官方文檔推薦的方式,先啓動master,執行。

./bin/start-master.sh

  2)部署dist的目錄到各個節點,而後經過這個命令來鏈接master節點

./spark-class org.apache.spark.deploy.worker.Worker spark://IP:PORT

  3)而後在主節點查看一下http://localhost:8080 ,查看一會兒節點是否在這裏,若是在,就說明鏈接成功了。

  4) 部署成功以後,想要在上面部署程序的話,在執行./spark-shell的時候,要加上MASTER這個參數。

MASTER=spark://IP:PORT ./spark-shell

三、High Availability

  Spark採用Standalone模式的話,Spark自己是一個master/slaves的模式,這樣就會存在單點問題,Spark採用的是zookeeper做爲它的active-standby切換的工具,設置也很簡單。一個完整的切換須要1-2分鐘的時間,這個時候新提交的做業會受到影響,以前提交到做業不會受到影響。

  在spark-env.sh添加如下設置:

//設置下面三項JVM參數,具體的設置方式在下面
//spark.deploy.recoveryMode=ZOOKEEPER
//spark.deploy.zookeeper.url=192.168.1.100:2181,192.168.1.101:2181
// /spark是默認的,能夠不寫
//spark.deploy.zookeeper.dir=/spark

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop.Master:2181,hadoop.SlaveT1:2181,hadoop.SlaveT2:2181"

  這裏就有一個問題了,集羣裏面有多個master,咱們鏈接的時候,鏈接誰?用過hbase的都知道是先鏈接的zookeeper,可是Spark採用的是另外的一種方式,若是咱們有多個master的話,實例化SparkContext的話,使用spark://host1:port1,host2:port2這樣的地址,這樣它會同時註冊兩個,一個失效了,還有另一個。

  若是不肯意配置高可用的話,只是想失敗的時候,再恢復一下,從新啓動的話,那就使用FILESYSTEM的使用,指定一個目錄,把當前的各個節點的狀態寫入到文件系統。

spark.deploy.recoveryMode=FILESYSTEM
spark.deploy.recoveryDirectory=/usr/lib/spark/dataDir

  當 stop-master.sh來殺掉master以後,狀態沒有及時更新,再次啓動的時候,會增長一分鐘的啓動時間來等待原來的鏈接超時。

  recoveryDirectory最好是可以使用一個nfs,這樣一個master失敗以後,就能夠啓動另一個master了。

相關文章
相關標籤/搜索