Task原理原始碼分析

2021-08-21 17:46:47 字數 1878 閱讀 2484

進入updatedependencies()函式

進入task類中的run()方法

在上面的task的run方法中,呼叫了抽象方法,runtask(),那就意味著關鍵的操作都要依賴於子類的實現,task的子類shufflemaptask,resulttask,要執行它們的runtask,才能執行我們自定義的運算元和邏輯

接下來是先進入shufflemaptask類進行分析

乙個shufflemaptask會將乙個rdd的元素,切分為多個bucket,基於乙個在shuffledependency中指定的partitioner,預設就是hashpartitioner

①首先呼叫了rdd的iterator()方法,並且傳入了,當前task要處理哪個partition,所以核心的邏輯就在rdd的iterator()方法中,在這裡,就實現了針對rdd的某個partition,執行我們自己定義的運算元或者函式,執行結束返回的資料都是通過shufflewriter,經過hashpartitioner進行分割槽之後,寫入自己對應的分割槽bucket

②返回結果mapstatus,mapstatus裡面封裝了shufflemaptask計算後的資料,其實就是blockmanager相關資訊,blockmanager,是spark底層的記憶體、資料、磁碟資料管理的元件

進入rdd類的iterator()方法

進入computeorreadcheckpoint()方法

進入compute()方法

到這裡對shufflemaptask類進行分析已經結束了

接下來是繼續對第一張圖中的statusupdate()方法剖析,進入corassgrianeexecubackend的statusupdate()方法

緊接著進入scheduler的statusupdate()方法

最後對resulttask的runtask進行剖析,因為resulttask是最後乙個task因此它的方法內容比較簡單

ForkJoin原始碼分析之Task

上一次分析了forkjoinpool構造時做了哪些工作,現在看一下這個框架的task是怎麼玩的。task有乙個頂層設計的介面就是forkjointask,有兩個類繼承了這個介面,分別是recursivetask,recursiveaction。區別就是乙個任務有返回值乙個任務沒有返回值。看看兩個ta...

workqueue原理和原始碼分析

workqueue,中文稱其為工作佇列,是乙個用於建立核心執行緒的介面,通過它建立的核心執行緒來執行核心其他模組排列到佇列裡的工作,建立的核心執行緒被稱為工作者執行緒。要理解工作佇列的實現,重點在於理解相關的三個資料結構的含義及關係。1 表示工作佇列型別的資料結構 struct workqueue ...

u boot原始碼配置原理分析

華清遠見嵌入式學院講師。u boot的源 預設是不針對任何目標平台的,當我們要移植u boot到乙個特定的目標平台時,需要生成針對目標平台的配置檔案。u boot目前已經支援的晶元可以在include configs 下面找到。比如我們要編譯針對s3c2410晶元的u boot.bin,那麼我們就需...