Spark-on-YARN (来自学习笔记)
Spark-on-YARN
1.??? 官方文檔
http://spark.apache.org/docs/latest/running-on-yarn.html
2.??? 配置安裝
1.安裝hadoop:需要安裝HDFS模塊和YARN模塊,HDFS必須安裝,spark運行時要把jar包存放到HDFS上。
2.安裝Spark:解壓Spark安裝程序到一臺服務器上,修改spark-env.sh配置文件,spark程序將作為YARN的客戶端用于提交任務
export JAVA_HOME=/usr/local/jdk1.7.0_80
export HADOOP_CONF_DIR=/usr/local/hadoop-2.6.4/etc/hadoop
3.啟動HDFS和YARN
3.??? 運行模式(cluster模式和client模式)
1.cluster模式
./bin/spark-submit--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
lib/spark-examples*.jar\
10
?
---------------------------------------------------------------------------------------------------------------------------------
./bin/spark-submit--class cn.toto.spark.day1.WordCount \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
/home/bigdata/hello-spark-1.0.jar\
hdfs://mycluster/wchdfs://mycluster/out-yarn-1
?
注意:hdfs的上面的端口默認是9000
?
2.client模式
./bin/spark-submit--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
lib/spark-examples*.jar\
10
?
spark-shell必須使用client模式
./bin/spark-shell--master yarn --deploy-mode client
?
3.兩種模式的區別
cluster模式:Driver程序在YARN中運行,應用的運行結果不能在客戶端顯示,所以最好運行那些將結果最終保存在外部存儲介質(如HDFS、Redis、Mysql)而非stdout輸出的應用程序,客戶端的終端顯示的僅是作為YARN的job的簡單運行狀況。
?
client模式:Driver運行在Client上,應用程序運行結果會在客戶端顯示,所有適合運行結果有輸出的應用程序(如spark-shell)
?
4.原理
cluster模式:
Spark Driver首先作為一個ApplicationMaster在YARN集群中啟動,客戶端提交給ResourceManager的每一個job都會在集群的NodeManager節點上分配一個唯一的ApplicationMaster,由該ApplicationMaster管理全生命周期的應用。具體過程:
?
1. 由client向ResourceManager提交請求,并上傳jar到HDFS上
這期間包括四個步驟:
a).連接到RM
b).從RM的ASM(ApplicationsManager)中獲得metric、queue和resource等信息。
c). upload app jar and spark-assembly jar
d).設置運行環境和container上下文(launch-container.sh等腳本)
?
2. ResouceManager向NodeManager申請資源,創建SparkApplicationMaster(每個SparkContext都有一個ApplicationMaster)
3. NodeManager啟動ApplicationMaster,并向ResourceManagerAsM注冊
4. ApplicationMaster從HDFS中找到jar文件,啟動SparkContext、DAGscheduler和YARN ClusterScheduler
5. ResourceManager向ResourceManagerAsM注冊申請container資源
6. ResourceManager通知NodeManager分配Container,這時可以收到來自ASM關于container的報告。(每個container對應一個executor)
7. Spark ApplicationMaster直接和container(executor)進行交互,完成這個分布式任務。
?
client模式:
在client模式下,Driver運行在Client上,通過ApplicationMaster向RM獲取資源。本地Driver負責與所有的executor container進行交互,并將最后的結果匯總。結束掉終端,相當于kill掉這個spark應用。一般來說,如果運行的結果僅僅返回到terminal上時需要配置這個。
?
客戶端的Driver將應用提交給Yarn后,Yarn會先后啟動ApplicationMaster和executor,另外ApplicationMaster和executor都是裝載在container里運行,container默認的內存是1G,ApplicationMaster分配的內存是driver- memory,executor分配的內存是executor-memory。同時,因為Driver在客戶端,所以程序的運行結果可以在客戶端顯示,Driver以進程名為SparkSubmit的形式存在。
總結
以上是生活随笔為你收集整理的Spark-on-YARN (来自学习笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark Streaming从Kafk
- 下一篇: 禅道安装