叢集相關
Cluster Manager指的是在叢集上擷取資源的外部服務,為每個spark application在叢集中排程和配置設定資源的元件,目前有三種類型:
- Standalone:Spark 原生的資源管理,由 Master 負責資源的配置設定
- Apache Mesos:與 Hadoop MapReduce 相容性良好的一種資源排程架構
- Hadoop Yarn:主要是指的 Yarn 中的 ResourceManager
Worker 指叢集中的工作節點,啟動并運作executor程序,運作大資料教育訓練作業代碼的節點
- standalone模式下:Worker程序所在節點
- yarn模式下: yarn的nodemanager程序所在的節點
Deploy Mode 分為兩種模式,client和cluster,差別在于driver運作的位置
- Client模式下driver運作在送出spark作業的機器上,
- 可以實時看到詳細的日志資訊
- 友善追蹤和排查錯誤,用于測試
- cluster模式下,spark application送出到cluster manager,cluster manager(比如master)負責在叢集中某個節點上,啟動driver程序,用于生産環境
- 通常情況下driver和worker在同一個網絡中是最好的,而client很可能就是driver worker分開布置,這樣網絡通信很耗時,cluster沒有這樣的問題
Spark分布式計算組成
Application
- 使用者編寫的Spark程式,通過一個有main方法的類執行,完成一個計算任務的處理。
- 它是由一個Driver程式和一組運作于Spark叢集上的Executor組成
Driver
- 運作main方法的Java虛拟機程序負責
- 監聽spark application的executor程序發來的通信和連接配接
- 将工程jar發送到所有的executor程序中
- driver排程task給executor執行
- Driver與Cluster Manager、Worker協作完成
- Application程序的啟動
- DAG劃分
- 計算任務封裝
- 配置設定task到executor上
- 計算資源的配置設定等排程執行作業等
- Driver排程task給executor執行,是以driver最好和spark叢集在一片網絡内,便以通信
Executor
- 運作在worker節點上,負責執行作業的任務,并将資料儲存在記憶體或磁盤中
- 每個spark application,都有屬于自己的executor程序,spark application不會共享一個executor程序
- executor在整個spark application運作的生命周期内,executor可以動态增加/釋放
- executor使用多線程運作SparkContext配置設定過來的task,來一批task就執行一批
使用者操作spark的入口
SparkContext是Spark的入口,負責連接配接Spark叢集,建立RDD,累積量和廣播量等
- SparkContext是Spark的對外接口,負責向調用者提供Spark的各種功能
- driver program通過SparkContext連接配接到叢集管理器來實作對叢集中任務的控制
- 每個JVM隻有一個SparkContext,一台伺服器可以啟動多個JVM
SparkSession
- The entry point to programming Spark with the Dataset and DataFrame API.
- 包含了SQLContext、HiveContext、sparkcontext
Spark計算切分相關
Job
- 一個spark application可能會被分為多個job,每次調用Action時,邏輯上會生成一個Job
- 一個Job包含了一個或多個Stage
Stage
- 每個job都會劃分為一個或多個stage(階段),每個stage都會有對應的一批task(即一個taskset),配置設定到executor上去執行
- Stage包括兩類
- ShuffleMapStage
- ResultStage
TaskSet
- 一組關聯的,但互相之間沒有Shuffle依賴關系的Task集合
- Stage可以直接映射為TaskSet,一個TaskSet封裝了一次需要運算的、具有相同處理邏輯的Task,
- 這些Task可以并行計算,粗粒度的排程是以TaskSet為機關的。
- 一個stage對應一個taskset
Task
- driver發送到executor上執行的計算單元,每個task負責在一個階段(stage),處理一小片資料,計算出對應的結果
- Task是在實體節點上運作的基本機關,Task包含兩類
- ShuffleMapTask => 對應于Stage中ShuffleMapStage中的一個執行基本單元
- ResultTask => 對應于Stage中ResultStage中的一個執行基本單元
Spark其他重要部分
資料結構
- RDD
- DataFrame 引入了schema和off-heap
- DataSet 整合了rdd和dataframe的優點,支援結構化和非結構化資料,采用堆外記憶體存儲,gc友好
核心排程器
- DAGScheduler 根據Job建構基于Stage的DAG,并送出Stage給TaskScheduler。
- SparkEnv Spark 公共服務們互相互動,用來給 Spark 應用程式建立分布式計算平台的運作時環境
- TaskScheduler 将Taskset送出給Worker node叢集運作并傳回結果。
Spark排程
送出方式
- yarn-cluster模式,用于生産模式,driver運作在nodeManager,沒有網卡流量激增問題,但檢視log麻煩,調試不友善
- Yarn-client模式,yarn-client用于測試,driver運作在本地用戶端,負責排程application,會與yarn叢集産生超大量的網絡通信,進而導緻網卡流量激增,yarn-client可以在本地看到所有log,友善調試
- yarn-client vs yarn-cluster
- yarn-client下,driver運作在spark-submit送出的機器上,ApplicationMaster隻是相當于一個ExecutorLauncher,僅僅負責申請啟動executor;driver負責具體排程
- yarn-cluster下,ApplicationMaster是driver,ApplicationMaster負責具體排程
Spark通用任務執行過程
- 使用者通過 spark-submit 腳本送出應用
- spark-submit 腳本啟動Driver,調用使用者定義的 main() 方法建構sparkConf和sparkContext對象,在sparkContext入口做了三件事,建立了
- sparkEnv對象
- TaskScheduler
- DAGScheduler
- Driver與cluster manager通信,申請資源以啟動Executor;
- cluster manager為Driver啟動Executor;
- 在使用者應用中代碼遇到對RDD的action算子操作的時候,觸發一個job,這時就會
- 調用DAGScheduler對象進行Stage劃分,将劃分好的stage按照分區生成一個一個的task,并且封裝到TaskSet對象中
- TaskSet送出到TaskScheduler,TaskScheduler按照送出過來的TaskSet,拿到一個序列化器,将TaskSet序列化,将序列化好的Task封裝并且送出到worker
- 任務在Executor中進行計算并儲存結果;
- 如果Driver的 main() 方法退出,或者調用了SparkContext.stop(),Driver會終止Executor,并且通過叢集管理器釋放資源。
spark 送出過程分析standalone
- SparkContext連接配接到Master,向Master注冊并申請資源
- Master根據資源申請要求和Worker心跳周期内報告的資訊決定在哪個Worker上配置設定資源,然後在該Worker上擷取資源,然後啟動StandaloneExecutorBackend
- StandaloneExecutorBackend向SparkContext注冊,建立Executor線程池
- SparkContext将Applicaiton代碼發送給StandaloneExecutorBackend
- SparkContext解析Applicaiton代碼,建構DAG圖,
- 送出給DAG Scheduler分解成Stage(當碰到Action操作時,就會催生Job;每個Job中含有1個或多個Stage,Stage一般在擷取外部資料和shuffle之前産生)
- 以Stage(或者稱為TaskSet)送出給Task Scheduler,
- Task Scheduler負責将Task配置設定到相應的Worker,最後送出給StandaloneExecutorBackend執行
- StandaloneExecutorBackend會建立Executor線程池,開始執行Task,并向SparkContext報告,直至Task完成。
- 所有Task完成後,SparkContext向Master登出,釋放資源。