【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屬於一個比較大的工程,時間有限,不少非關鍵點會選擇點到即止,另外存在理解錯誤望理解與指正!
相關文章
相關標籤/搜索