Spark Executor 概述


Spark Executor 工作原理:

    1. 在CoarseGrainedExecutorBackend啟動時向Driver注冊Executor,其實質是注冊ExecutorBackend實例,和Executor實例之間沒有直接關系

    2. CoarseGrainedExecutorBackend 是 Executor 運行所在的進程名稱,Executor才是真正處理Task的對象。Executor內部是通過線程池的方式來完成Task的計算的

    3. CoarseGrainedExecutorBackend 和 Executor是一一對應的

    4. CoarseGrainedExecutorBackend 是一個消息通信體(其具體實現了ThreadSafeRPCEndpoint),可以發送信息給Driver並可以接受Driver中發過來的指令,例如啟動Task等

    5. 在Driver進程有兩個至關重要的Endpoint:

             a)    ClientEndpoint : 主要負責向Master 注冊當前的程序, 是AppClient的內部成員;

             b)   DriverEndpoint: 這是整個程序運行時候的驅動器,是CoarseGrainedSchedulerBackend的內部成員;

    6. 在Driver中通過ExecutorData封裝並注冊ExecutorBackend的信息到Driver的內存數據結構executorMapData中;

    7. 實際在執行的時候,DriverEndPoint會把信息寫CoarseGrainedSchedulerBackend的內存數據結構executorMapData,所以說最終是注冊給了 CoarseGrainedSchedulerBackend,也就是說CoarseGrainedExecutorBackend 掌握了為當前程序分配的所有的ExecutorBackend進程,而在每一個ExecutorBackend進程實例中會通過 Executor對象來負責具體Task的運行。

    8. CoarseGrainedExecutorBackend 收到 DriverEndpoint 發送過來的 RegisteredExecutor 消息后啟動 Executor 實例對象,而Executor實例對象是事實上負責真正Task計算的

 

Executor具體是如何工作的:

    1. 當Driver發送過來Task的時候,其實是發送給了CoarseGrainedExecutorBackend這個RpcEndpoint, 而不是直接發送給了Executor

    2. ExecutorBackend在收到Driver中發送過來的消息后會提供調用lauchTask來交給Executor去執行

 

下圖是各個Endpoint之間的消息通信圖,可以通過查看原圖看到完整的圖。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM