1.配置
安裝Hadoop:需要安裝HDFS模塊和YARN模塊,spark運行時要把jar包放到HDFS上。
安裝Spark:不需要啟動Spark集群,在client節點配置中spark-env.sh添加JDK和HADOOP_CONF_DIR目錄,Spark程序將作為yarn的客戶端用戶提交任務。
export JAVA_HOME=/usr/local/jdk1.8.0_161 export HADOOP_CONF_DIR=/usr/local/src/hadoop-2.6.1/etc/hadoop
啟動HDFS和YARN
2.yarn-client和yarn-cluster提交任務的方式
client模式:
./bin/spark-submit \
--master yarn \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--class org.apache.spark.examples.SparkPi \
examples/jars/spark-examples_2.11-2.0.2.jar \
1000
--master yarn(默認client模式) 等價於 yarn-client(已棄用)和--master yarn --deploy-mode client
spark-shell和pypark必須使用yarn-client模式,因為這是交互式命令,Driver需運行在本地。
cluster模式:
./bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
examples/jars/spark-examples_2.11-2.0.2.jar \
1000
3.兩種模式的區別
cluster模式:Driver程序在YARN中運行,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申請資源,創建Spark ApplicationMaster(每個SparkContext都有一個ApplicationMaster)
3. NodeManager啟動ApplicationMaster,並向ResourceManager AsM注冊
4. ApplicationMaster從HDFS中找到jar文件,啟動SparkContext、DAGscheduler和YARN Cluster Scheduler
5. ResourceManager向ResourceManager AsM注冊申請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的形式存在。