Spark on YARN是spark運行在yarn上,其中有yarn-client和yarn-cluster兩種模式,它們的區別在於Driver運行的結點位置。
- yarn-client模式
yarn-client模式下的spark的Driver運行在客戶端,適用於交互、調試,希望立即看到app的輸出。 - yarn-cluster模式
yarn-cluster模式下的spark的Driver運行在ResourceManager(以下簡稱RM)啓動的ApplicationMaster(以下簡稱AM)下,這個模式適用於生產環境,本次介紹的任務提交流程也是基於這個模式的。
先看概覽圖:
- App Submit
首先我們寫好的代碼經過打包成jar文件,然後通過spark client提交給yarn的RM。RM是yarn的資源管理器,負責調度集羣的資源。 - 啓動Driver
Spark App被提交到RM後,RM會在集羣的一個節點上啓動AM以及Driver。 - 申請資源
AM向RM申請資源,提供spark程序所需的資源。 - 返回資源列表
RM向AM返回自己的資源列表。 - 創建執行器對象Executor
爲了平衡壓力,AM會在集羣的其他NodeManager啓動Executor,由於在YARN及羣中,要實現計算框架可插拔,不會直接在NM創建Executor,要通過Container容器創建執行器Executor。因爲NM還要執行其他計算框架的任務,所以抽象了一個Container容器來創建特定的計算框架的任務。 - 反向註冊
Executor創建完成後要向Driver註冊,告訴Driver Executor已經創建成功。 - 分解任務,調度任務
Driver等待所有Executor創建好後(上圖只創建了一個Executor)就會把客戶端提交上來的任務進行分解,然後分發到所有的Executor中去。