一、前述
Spark可以和Yarn整合,將Application提交到Yarn上運行,和StandAlone提交模式一樣,Yarn也有兩種提交任務的方式。
二、具體
1、yarn-client提交任務方式
- 配置
在client節點配置中spark-env.sh添加Hadoop_HOME的配置目錄即可提交yarn 任務,具體步驟如下:
注意client只需要有Spark的安裝包即可提交任務,不需要其他配置(比如slaves)!!!
- 提交命令
./spark-submit --master yarn --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100
./spark-submit --master yarn-lient --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100
./spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100
- 執行原理圖解
- 執行流程
- 客戶端提交一個Application,在客戶端啟動一個Driver進程。
- Driver進程會向RS(ResourceManager)發送請求,啟動AM(ApplicationMaster)的資源。
- RS收到請求,隨機選擇一台NM(NodeManager)啟動AM。這里的NM相當於Standalone中的Worker節點。
- AM啟動后,會向RS請求一批container資源,用於啟動Executor.
- RS會找到一批NM返回給AM,用於啟動Executor。
- AM會向NM發送命令啟動Executor。
- Executor啟動后,會反向注冊給Driver,Driver發送task到Executor,執行情況和結果返回給Driver端。
- 總結
1、Yarn-client模式同樣是適用於測試,因為Driver運行在本地,Driver會與yarn集群中的Executor進行大量的通信,會造成客戶機網卡流量的大量增加.
2、 ApplicationMaster的作用:
為當前的Application申請資源
給NodeManager發送消息啟動Executor。
注意:ApplicationMaster有launchExecutor和申請資源的功能,並沒有作業調度的功能。
2、yarn-cluster提交任務方式
- 提交命令
./spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100
./spark-submit --master yarn-cluster --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100
結果在yarn的日志里面:
- 執行原理
- 執行流程
- 客戶機提交Application應用程序,發送請求到RS(ResourceManager),請求啟動AM(ApplicationMaster)。
- RS收到請求后隨機在一台NM(NodeManager)上啟動AM(相當於Driver端)。
- AM啟動,AM發送請求到RS,請求一批container用於啟動Executor。
- RS返回一批NM節點給AM。
- AM連接到NM,發送請求到NM啟動Executor。
- Executor反向注冊到AM所在的節點的Driver。Driver發送task到Executor。
- 總結
1、Yarn-Cluster主要用於生產環境中,因為Driver運行在Yarn集群中某一台nodeManager中,每次提交任務的Driver所在的機器都是隨機的,不會產生某一台機器網卡流量激增的現象,缺點是任務提交后不能看到日志。只能通過yarn查看日志。
2.ApplicationMaster的作用:
為當前的Application申請資源
給nodemanager發送消息 啟動Excutor。
任務調度。(這里和client模式的區別是AM具有調度能力,因為其就是Driver端,包含Driver進程)
3、 停止集群任務命令:yarn application -kill applicationID
自我最后總結:stand-alone模式中Master發送對應的命令啟動Worker上的executor進程,而yarn模式中的applimaster也是負責啟動worker中的Driver進程,可見都是master負責發送消息,然后再對應的節點上啟動executor進程。菲官方證實,僅供理解!!!