再論Yarn Client和Yarn cluster
1、先看看Yarn client的架構示意圖
Yarn Client首先在Client端啟動Driver,就是在Client端跑main函數了,這時候main函式所在的jar包還沒提交給Yarn叢集。SparkContext開始跑了,並且啟動了YarnClientSchedulerBackend。然後YarnClientSchedulerBackend向Yarn提交申請執行ApplicationMaster(spark-yarn工程裡的類),Yarn叢集找到一臺Container來執行ApplicationMaster,注意了:這裡和yarn cluster的區別就是在Container上只啟動ApplicationMaster,並不會啟動Driver,因為已經啟動過了。然後ApplicationMaster負責資源分配,排程Container來執行Executor,並且這些被排程啟動的Executor是與Client端的Driver進行通訊的。
2、再看看Yarn cluster的架構示意圖
而Yarn cluster就簡單的多了,Client端並不執行任何東西,將jar提交給Yarn叢集,Yarn叢集找到一臺Container啟動ApplicationMaster,這時候和yarn client的區別就來了,這時候ApplicationMaster會接著啟動Driver,也就是說Driver和ApplicationMaster在同一個地方,然後ApplicationMaster進行排程啟動的Executor也是同Driver通訊,要注意的點就是這裡的Driver和ApplicationMaster在同一個地方,執行在同一個程序內。
最後,Yarn client用於除錯環境,而Yarn cluster