Spark 在yarn上運行模式詳解:cluster模式和client模式


 

1.    官方文檔

http://spark.apache.org/docs/latest/running-on-yarn.html

2.    配置安裝

2.1.安裝hadoop:需要安裝HDFS模塊和YARN模塊,HDFS必須安裝,spark運行時要把jar包存放到HDFS上。

2.2.安裝Spark:解壓Spark安裝程序到一台服務器上,修改spark-env.sh配置文件,spark程序將作為YARN的客戶端用於提交任務

export JAVA_HOME=/usr/local/jdk1.8

export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop

2.3.啟動HDFS和YARN

3.    運行模式(cluster模式和client模式)

3.1.cluster模式

官網案例計算PI


spark-submit --class org.apache.spark.examples.SparkPi \

--master yarn \

--deploy-mode cluster \

--driver-memory 1g \

--executor-memory 1g \

--executor-cores 1 \

/export/servers/spark/examples/jars/spark-examples_2.11-2.0.2.jar \

10


 

# 關閉虛擬機內存檢查(避免虛擬機內存不足時,無法運行)

<property> 

                <name>yarn.nodemanager.vmem-check-enabled</name> 

               <value>false</value> 

 </property>

 

 3.2.client模式


spark-submit --class org.apache.spark.examples.SparkPi \

--master yarn \

--deploy-mode client \

--driver-memory 1g \

--executor-memory 512m \

--executor-cores 1 \

/export/servers/spark/examples/jars/spark-examples_2.11-2.0.2.jar \

10


 spark-shell必須使用client模式

spark-shell --master yarn --deploy-mode client

 

3.3.兩種模式的區別

cluster模式:Driver程序在YARN中運行,應用的運行結果不能在客戶端顯示,所以最好運行那些將結果最終保存在外部存儲介質(如HDFS、Redis、Mysql)而非stdout輸出的應用程序,客戶端的終端顯示的僅是作為YARN的job的簡單運行狀況。

 

client模式:Driver運行在Client上,應用程序運行結果會在客戶端顯示,所有適合運行結果有輸出的應用程序(如spark-shell)

 

3.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. ResourceManager為該應用程序分配第一個Container,創建Spark ApplicationMaster(每個SparkContext都有一個ApplicationMaster)

3. NodeManager啟動ApplicationMaster,並向ResourceManager注冊

4. ApplicationMaster從HDFS中找到jar文件,啟動SparkContext、DAGscheduler和YARN Cluster Scheduler

5. ApplicationMaster向ResourceManager注冊申請container資源

6. ResourceManager通知NodeManager分配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的形式存在。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM