Spark 支持 Yarn 集羣的部署模式,在 Spark On Yarn 模式下,每一個 Spark 的 Executor 做爲一個 Yarn container 在運行,同事支持多個任務在同一個 container 中運行。html
Yarn 的 Application Master 概念:在 Yarn 中,每一個 application 都有一個 Application 都有一個 Application Master 進程,它是 Application 啓動的第一個容器,負責從 ResourceManager 中申請資源,分配資源,同時通知 NodeManager 來爲 Application 啓動 Container。web
Spark On Yarn 有兩種模式,一種是 Yarn-client 模式,一種是 Yarn-cluster 模式。通常狀況下,Yarn-client 模式使用在調試模式下,Yarn-cluster 模式使用在生產環境中。app
在 Yarn-cluster 模式下,driver 運行在 Appliaction Master 上,Appliaction Master 進程同時負責驅動 Application 和從 Yarn 中申請資源,該進程運行在 Yarn container 內,因此啓動 Application Master 的 client 能夠當即關閉而沒必要持續到 Application 的生命週期,下圖是 Yarn-cluster 模式:oop
在 Yarn-cluster 模式中,當用戶向 Yarn 中提交一個應用程序後,Yarn 將分兩個階段運行該應用程序:調試
應用的運行結果不能在客戶端顯示(能夠在 history server 中查看),因此最好將結果保存在 HDFS 而非 stdout 輸出,客戶端的終端顯示的是做爲 Yarn 的 job 的簡單運行情況。cdn
在 Yarn-client 中,driver 運行在 client 上,經過 ApplicationMaster 向 RM 獲取資源。本地 driver 負責與全部的 executor container 進行交互,並將最後的結果彙總。結束掉終端,至關於 kill 掉這個 Spark 應用。由於 driver 在客戶端,因此能夠經過 webUI 訪問 driver 的狀態,默認是 http://hadoop1:4040 訪問,而 Yarn 經過 http:// hadoop1:8088 訪問。工做流程以下圖:server
具體的執行流程以下圖所示:htm
對比兩種模式能夠看出一點,Yarn-client 模式下的 driver 進程執行在本地機器上,而 Yarn-cluster 模式下的 driver 進程執行在 Yarn 集羣上面。blog
參考:www.cnblogs.com/ITtangtang/…生命週期