之前以standalone模式剖析過spark程序的執行流程,這裏來剖析下其他兩種模式(yarn-cluster和yarn-client)的區別。
一般yarn-client用於測試環境調試程序;yarn-cluster用於生產環境。看完下面的剖析就明白爲什麼。
一、yarn-cluster
與standalone模式不同,yarn-cluster是基於yarn集羣,yarn集羣上有ResourceManager(RM)和NodeManager(NM)。
1、發送請求到RM,請求啓動AM
2、RM會分配container,在某個NM上啓動AM
3、AM啓動後,和RM通訊,請求container來啓動executor
4、RM會給AM提供一批container用於啓動executor
5、AM連接其他NM啓動executor
6、executor啓動後向AM反向註冊
7、後續的DAGScheduler、TaskScheduler、Shuffle等操作都是和standaloe一樣。詳見前面的blog
二、yarn-client
從上圖可以看出,yarn-client和yarn-cluster的區別就在於,Driver是運行在本地客戶端,它的AM只是作爲一個Executor啓動器,並沒有Driver進程。
總結
看到這裏,開頭爲什麼說yarn-client用於測試環境調試程序;yarn-cluster用於生產環境就清楚了。
1、yarn-client,driver運行在本地客戶端,負責調度Application,會與yarn集羣產生大量的網絡通信,從而導致網卡流量激增。好處是,執行時可以在本地看到所有的log,便於調試。所以一般用於測試環境。
2、yarn-cluster,driver運行在NodeManager,每次運行都是隨機分配到NM機器上去,不會有網卡流量激增的問題。缺點就是本地提交後看不到log,只能通過yarn application-logs application id命令來查看。比較麻煩。