【Spark2.0源碼學習】-1.概述


      Spark作為當前主流的分布式計算框架,其高效性、通用性、易用性使其得到廣泛的關注,本系列博客不會介紹其原理、安裝與使用相關知識,將會從源碼角度進行深度分析,理解其背后的設計精髓,以便后續在Spark使用以及設計類似產品提供相關經驗,下面開始進入正題。
 
     本系列博客將從集群各端點的設計原理、通信方式、啟動流程,以及用戶任務提交后,任務的集群加載、分解、調度的方式兩個方面進行解讀。
 
首先,從腳本開始
 
          詳見《【Spark2.0源碼學習】-2.一切從腳本說起
 
其次,在集群各端點的設計原理、通信方式、啟動方面
 
     Spark集群由若干節點構成,而每個節點都是可以接受與發送消息的RPC服務端點(終端 ,英文:Endpoint),根據責任的不同可以分為三類端點:Client、Master、Worker,三端調用關系:
     
  1. Client: Spark任務節點,負責發布,查詢,以及中止任務的相關進程的統稱,Client是運行時有效進程,如果相關任務處理完成,對應的進程結束
  2. Master: Spark管理節點,負責管理Worker進程,協調調度Client發布的任務處理,Master節點可以為多個,有且僅能有一個為acitvity狀態,其他為standby狀態
  3. Worker: Spark工作節點,負責具體的任務執行工作
 
     我們將在如下章節逐步介紹:
     《【Spark2.0源碼學習】-3.Endpoint模型介紹
     《【Spark2.0源碼學習】-4.Master啟動
     《【Spark2.0源碼學習】-5.Worker啟動
     《【Spark2.0源碼學習】-6.Client啟動
 
最后,在任務的集群加載、分解、調度方面
 
     基於三端模型,用戶通過spark-submit提交或者運行spark-shell REPL,集群創建Driver,Driver加載Application,最后Application根據用戶代碼轉化為RDD,RDD分解為Tasks,Executor執行Task等系列知識,整體交互藍圖如下:
   
     (注:如果不能完全理解,可在閱讀完相關章節后再回來理解)
  1. Client運行時向Master發送啟動驅動申請(發送RequestSubmitDriver指令)
  2. Master調度可用Worker資源進行驅動安裝(發送LaunchDriver指令)
  3. Worker運行DriverRunner進行驅動加載,並向Master發送應用注冊請求(發送RegisterApplication指令)
  4. Master調度可用Worker資源進行應用的Executor安裝(發送LaunchExecutor指令)
  5. Executor安裝完畢后向Driver注冊驅動可用Executor資源(發送RegisterExecutor指令)
  6. 最后是運行用戶代碼時,通過DAGScheduler,TaskScheduler封裝為可以執行的TaskSetManager對象
  7. TaskSetManager對象與Driver中的Executor資源進行匹配,在隊形的Executor中發布任務(發送LaunchTask指令)
  8. TaskRunner執行完畢后,調用DriverRunner提交給DAGScheduler,循環7.直到任務完成
     
    我們將在如下章節逐步介紹:
     《【Spark2.0源碼學習】-7.Driver與DriverRunner
     《【Spark2.0源碼學習】-8.SparkContext與Application介紹
     《【Spark2.0源碼學習】-9.Job提交與Task的拆分
     《【Spark2.0源碼學習】-10.Task執行與回饋
 
     說明:由於Spark屬於一個比較大的工程,時間有限,很多非關鍵點會選擇點到即止,另外存在理解錯誤望理解與指正!


免責聲明!

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



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