Spark Task 的執行流程② - 建立、分發 Task
本文為 Spark 2.0 原始碼分析筆記,由於原始碼只包含 standalone 模式下完整的 executor 相關程式碼,所以本文主要針對 standalone 模式下的 executor 模組,文中內容若不特意說明均為 standalone 模式內容
建立 task(driver 端)
task 的建立本應該放在分配 tasks 給 executors一文中進行介紹,但由於建立的過程與分發及之後的反序列化執行關係緊密,我把這一部分內容挪到了本文。
建立 task 是在 TaskSetManager#resourceOffer(...)
中實現的,更準確的說是建立 TaskDescription
,task 及依賴的環境都會被轉換成 byte buffer,然後與 taskId、taskName、execId
等一起構造 TaskDescription
物件,該物件將在之後被序列化並分發給 executor 去執行,主要流程如下:
從流程圖中可以看出,task 依賴了的檔案、jar 包、設定的屬性及其本身都會被轉換成 byte buffer
分發 task(driver 端)
分發 task 操作是在 driver 端的 CoarseGrainedSchedulerBackend#launchTasks(tasks: Seq[Seq[TaskDescription]])
中進行,由於上一步已經建立了 TaskDescription 物件,分發這裡要做的事就很簡單,如下:
僅僅是序列化了 TaskDescription
物件併傳送 LaunchTask
訊息給 CoarseGrainedExecutorBackend
worker 接收並處理 LaunchTask 訊息
LaunchTask 訊息是由 CoarseGrainedExecutorBackend 接收到的,接收到後的處理流程如下:
接收到訊息後,CoarseGrainedExecutorBackend 會從訊息中反序列化出 TaskDescription 物件並交給 Executor 去執行;Executor 利用 TaskDescription 物件建立 TaskRunner 然後提交到自帶的執行緒池中執行。
關於 TaskRunner、執行緒池以及 task 具體是如何執行的,將會在下一篇文章中詳述,本文只關注建立、分發 task 的過程。
作者:牛肉圓粉不加蔥
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4687/viewspace-2818575/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spark Task 的執行流程④ - task 結果的處理Spark
- spark 原始碼分析之二十一 -- Task的執行流程Spark原始碼
- Flink - Task 任務排程執行流程
- 走進Task(2):Task 的回撥執行與 awaitAI
- 執行緒 執行緒池 Task執行緒
- 多執行緒系列(四):Task執行緒
- vscode中執行gulp的taskVSCode
- Spark Job-Stage-Task例項理解Spark
- Task.Run(), Task.Factory.StartNew() 和 New Task() 的行為不一致分析
- Camunda User Task:Task Listeners
- Event loop的macro task和micro taskOOPMac
- 執行緒(一)——執行緒,執行緒池,Task概念+程式碼實踐執行緒
- spark task與stage數量過多調優Spark
- 多執行緒07:async、future、packaged_task、promise執行緒PackagePromise
- Task+ConcurrentQueue多執行緒程式設計執行緒程式設計
- celery筆記三之task和task的呼叫筆記
- .net使用Task多執行緒執行任務 .net限制執行緒數量執行緒
- task 7
- Gradle系列(二) Gradle執行順序和taskGradle
- celery筆記九之task執行結果檢視筆記
- Spring Task 定時任務 - 多執行緒配置Spring執行緒
- .NET - Task.Run vs Task.Factory.StartNew
- 《深入理解Spark》之Spark的整體執行流程Spark
- Task.Run(async () =>{}) 和 Task.Run(() =>{})區別
- Java併發程式設計實戰系列6之任務執行(Task Execution)Java程式設計
- task1
- [Javascript] Paralle TaskJavaScript
- 【Oracle】-【TWO_TASK】-TWO_TASK環境變數的作用Oracle變數
- Spark學習(一)——執行模式與執行流程Spark模式
- spark 原始碼分析之二十二-- Task的記憶體管理Spark原始碼記憶體
- Godot UI執行緒,Task非同步和訊息彈窗通知GoUI執行緒非同步
- Apache DolphinScheduler將上游Task執行結果傳遞給下游Apache
- C#執行緒篇---Task(任務)和執行緒池不得不說的祕密C#執行緒
- Task 0 Go初探Go
- JS Task2JS
- C++ async taskC++
- WBS和TASK的區別?
- Activity 的 Task 以及 launchMode 研究