一、先看看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進行通訊的。函數
二、再看看Yarn cluster的架構示意圖spa
而Yarn cluster就簡單的多了,Client端並不執行任何東西,將jar提交給Yarn集羣,Yarn集羣找到一臺Container啓動ApplicationMaster,這時候和yarn client的區別就來了,這時候ApplicationMaster會接着啓動Driver,也就是說Driver和ApplicationMaster在同一個地方,而後ApplicationMaster進行調度啓動的Executor也是同Driver通訊,要注意的點就是這裏的Driver和ApplicationMaster在同一個地方,運行在同一個進程內。3d
最後,Yarn client用於調試環境,而Yarn cluster用於生產環境。調試