yarn cluster和yarn client模式區別——yarn-cluster適用於生產環境,結果存HDFS;而yarn-client適用於交互和調試,也就是希望快速地看到application的輸出


Yarn-cluster VS Yarn-client

  從廣義上講,yarn-cluster適用於生產環境;而yarn-client適用於交互和調試,也就是希望快速地看到application的輸出。

  在我們介紹yarn-cluster和yarn-client的深層次的區別之前,我們先明白一個概念:Application Master。在YARN中,每個Application實例都有一個Application Master進程,它是Application啟動的第一個容器。它負責和ResourceManager打交道,並請求資源。獲取資源之后告訴NodeManager為其啟動container。

  從深層次的含義講,yarn-cluster和yarn-client模式的區別其實就是Application Master進程的區別,yarn-cluster模式下,driver運行在AM(Application Master)中,它負責向YARN申請資源,並監督作業的運行狀況。當用戶提交了作業之后,就可以關掉Client,作業會繼續在YARN上運行。然而yarn-cluster模式不適合運行交互類型的作業。而yarn-client模式下,Application Master僅僅向YARN請求executor,client會和請求的container通信來調度他們工作,也就是說Client不能離開。

Yarn-cluster:

Spark Driver首先作為一個ApplicationMaster在YARN集群中啟動,客戶端提交給ResourceManager的每一個job都會在集群的worker節點上分配一個唯一的ApplicationMaster,由該ApplicationMaster管理全生命周期的應用。因為Driver程序在YARN中運行,所以事先不用啟動Spark Master/Client,應用的運行結果不能在客戶端顯示(可以在history server中查看),所以最好將結果保存在HDFS而非stdout輸出,客戶端的終端顯示的是作為YARN的job的簡單運行狀況。

 

 

 

步驟如下:

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啟動Spark App Master,並向ResourceManager AsM注冊
4. Spark ApplicationMaster從HDFS中找到jar文件,啟動DAGscheduler和YARN Cluster Scheduler
5. ResourceManager向ResourceManager AsM注冊申請container資源(INFO YarnClientImpl: Submitted application)
6. ResourceManager通知NodeManager分配Container,這時可以收到來自ASM關於container的報告。(每個container的對應一個executor)
7.  Spark ApplicationMaster直接和container(executor)進行交互,完成這個分布式任務。
需要注意的是:
a). Spark中的localdir會被yarn.nodemanager.local-dirs替換
b). 允許失敗的節點數(spark.yarn.max.worker.failures)為executor數量的兩倍數量,最小為3.
c). SPARK_YARN_USER_ENV傳遞給spark進程的環境變量
d). 傳遞給app的參數應該通過–args指定。
 
Yarn-client:
(YarnClientClusterScheduler)查看對應類的文件
在yarn-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的形式存在。

 配置YARN-Client模式同樣需要HADOOP_CONF_DIR/YARN_CONF_DIR和SPARK_JAR變量。
參考文章如下:
1.http://www.aboutyun.com/thread-12294-1-1.html
2.http://www.cnblogs.com/MOBIN/p/5857314.html
3.https://www.iteblog.com/archives/1223.html


免責聲明!

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



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