1. 程式人生 > >spark的三種模式的詳細執行過程(基於standalone與基於yarn)

spark的三種模式的詳細執行過程(基於standalone與基於yarn)

一、Standalone模式

1、使用SparkSubmit提交任務的時候(包括Eclipse或者其它開發工具使用new SparkConf()來執行任務的時候),Driver執行在Client;使用SparkShell提交的任務的時候,Driver是執行在Master上
2、使用SparkSubmit提交任務的時候,使用本地的Client類的main函式來建立sparkcontext並初始化它;
3、SparkContext連線到Master,註冊並申請資源(核心和記憶體)。
4、Master根據SC提出的申請,根據worker的心跳報告,來決定到底在那個worker上啟動StandaloneExecutorBackend(executor)
5、executor向SC註冊
6、SC將應用分配給executor,
7、SC解析應用,建立DAG圖,提交給DAGScheduler進行分解成stage(當出發action操作的時候,就會產生job,每個job中包含一個或者多個stage,stage一般在獲取外部資料或者shuffle之前產生)。然後stage(又稱為Task Set)被髮送到TaskScheduler。TaskScheduler負責將stage中的task分配到相應的worker上,並由executor來執行
8、executor建立Executor執行緒池,開始執行task,並向SC彙報
9、所有的task執行完成之後,SC向Master登出

二、yarn client

1、spark-submit指令碼提交,Driver在客戶端本地執行;
2、Client向RM申請啟動AM,同時在SC(client上)中建立DAGScheduler和TaskScheduler。
3、RM收到請求之後,查詢NM並選擇其中一個,分配container,並在container中開啟AM
4、client中的SC初始化完成之後,與AM進行通訊,向RM註冊,根據任務資訊向RM申請資源
5、AM申請到資源之後,與AM進行通訊,要求在它申請的container中開啟CoarseGrainedExecutorBackend(executor)。Executor在啟動之後會向SC註冊並申請task
6、SC分配task給executor,executor執行任務並向Driver(執行在client之上的)彙報,以便客戶端可以隨時監控任務的執行狀態
7、任務執行完成之後,client的SC向RM登出自己並關閉自己

三、yarn cluster

1、spark-submit指令碼提交,向yarn(RM)中提交ApplicationMaster程式、AM啟動的命令和需要在Executor中執行的程式等
2、RM收到請求之後,選擇一個NM,在其上開啟一個container,在container中開啟AM,並在AM中完成SC的初始化
3、SC向RM註冊並請求資源,這樣使用者可以在RM中檢視任務的執行情況。RM根據請求採用輪詢的方式和RPC協議向各個NM申請資源並監控任務的執行狀況直到結束
4、AM申請到資源之後,與對應的NM進行通訊,要求在其上獲取到的Container中開啟CoarseGrainedExecutorBackend(executor),executor 開啟之後,向AM中的SC註冊並申請task
5、AM中的SC分配task給executor,executor執行task兵向AM中的SC彙報自己的狀態和進度
6、應用程式完成之後(各個task都完成之後),AM向RM申請登出自己兵關閉自己