這裡主要說明作業提交的過程原始碼。sparksubmit在org.apache.spark.deploy中,submit是乙個單獨的程序,首先檢視它的main方法:
createlaunchenv方法中設定了一些配置引數:如返回值、集群模式、執行環境等。這裡主要檢視client的集群模式。下面看下作業提交序列圖:
client的啟動方法prestart。
client是乙個actor,client提交任務,首先需要封裝好driverdescription引數。包括jar檔案url、momory、cpu cores等。然後向master傳送requestsubmitdriver訊息。
master中接收requestsubmitdriver訊息的處理:
這裡主要看下schedule這個方法:
上面原始碼中。主要看;兩個方法launchdriver、launchexecutor
launchdriver:是讓worker來啟動driver
master向worker傳送了launchdriver和launchexecutor。這裡在就跟蹤worker下怎麼處理master傳送的這兩個訊息。
launchdriver啟動driver
worker建立乙個executorrunner執行緒,executorrunner會啟動executorbackend程序
這裡真正的執行方法在executorrunner中的fetchandrunexecutor方法中。
接下來從一張流程圖中簡要描述了作業提交的流程。
2)客戶端的driver向master註冊。
3)master會讓worker啟動exeuctor。
4)worker建立乙個executorrunner執行緒,executorrunner會啟動executorbackend程序。 executorbackend啟動後會向driver的schedulerbackend註冊。
5)driver的dagscheduler解析作業並生成相應的stage,每個stage包含的task通過taskscheduler分配給executor執行。 所有stage都完成後作業結束。
Spark原始碼走讀6 Shuffle
在map和reduce之間的過程就是shuffle,shuffle的效能直接影響整個spark的效能。所以shuffle至關重要。從圖中得知,map輸出的結構產生在bucket中。而bucket的數量是map reduce的個數。這裡的每乙個bucket都對應乙個檔案。map對bucket書是寫入資...
kube scheduler原始碼走讀
螞蟻金服kubernetes方向招聘 kube scheduler是k8s中相對比較簡單的乙個服務,它監聽api server獲取新建的pod,從眾多的node中選擇乙個合適的,來執行該pod。選擇的過程分兩個階段 預選階段 優選階段 本文簡單的跟進一下kube scheduler執行的整個流程。入...
JDK原始碼走讀(4) 容器之LinkedList
本章分析list系列中的linkedlist,真正意義上的鍊錶,底層採用鍊錶形式儲存資料元素。linkedlist是乙個雙向鍊錶,可以向前或向後兩個方向遍歷鍊錶。linkedlist也可以存放null元素。一 類實現 繼承體系結構 為了對整個list實現 繼承體系有個全貌,先將體系結構圖畫出來 二 ...