spark 教程二 spark中的一些術語和概念


1.Application:基於spark的用戶程序,包含了一個driver program 和集群中多個 executor

2.Driver Program:運行application的main()函數並自動創建SparkContext。通常SparkContext 代表driver program

3.Executor:為某個Application運行在worker node 上的一個進程。該進程負責運行task並負責將數據存儲在內存或者硬盤上,每個application 都有自己獨立的 executors

4.Cluster Mannager:在集群上獲得資源的外部服務(spark standalon,mesos,yarm)

5.Worker Node:集群中任何可運行application 代碼的節點

6.RDD:spark 的幾本運算單元,通過scala集合轉化,讀取數據集生成或者由其他RDD進過算子操作得到

7.Job:可以被拆分成task並行計算的單元,一般為spark action 觸發的一次執行作業

8.Stage:每個job會被拆分成很多組task,每組任務被稱為stage,也可稱TaskSet,該屬於經常在日志中看到

9.task:被送到executor上執行的工作單元

基本運行流程

Spark應用程序有多種運行模式。SparkContext和Executor這兩部分的核心代碼實現在各種運行模式中都是公用的,在這兩部分之上,根據運行部署模式(例如:Local[N]、Yarn cluster等)的不同,有不同的調度模塊以及對應的適配代碼。

圖3-1 基本框架圖

具體來說,以SparkContext為程序運行的總入口,在SparkContext的初始化過程中,Spark會分別創建DAGScheduler作業和TaskScheduler任務調度兩級調度模塊。

其中作業調度模塊是基於任務階段的高層調度模塊,它為每個Spark作業計算具有依賴關系的多個調度階段(通常根據shuffle來划分),然后為每個階段構建出一組具體的任務(通常會考慮數據的本地性等),然后以TaskSets(任務組)的形式提交給任務調度模塊來具體執行。而任務調度模塊則負責具體啟動任務、監控和匯報任務運行情況。

詳細的運行流程為:

  1. 構建Spark Application的運行環境(啟動SparkContext),SparkContext向資源管理器(可以是Standalone、Mesos或YARN)注冊並申請運行Executor資源;
  2. 資源管理器分配Executor資源並啟動StandaloneExecutorBackend,Executor運行情況將隨着心跳發送到資源管理器上;
  3. SparkContext構建成DAG圖,將DAG圖分解成Stage,並把Taskset發送給Task Scheduler。Executor向SparkContext申請Task,Task Scheduler將Task發放給Executor運行同時SparkContext將應用程序代碼發放給Executor。
  4. Task在Executor上運行,運行完畢釋放所有資源。

sparkProcessDetail

作業調度模塊和具體的部署運行模式無關,在各種運行模式下邏輯相同。不同運行模式的區別主要體現在任務調度模塊。不同的部署和運行模式,根據底層資源調度方式的不同,各自實現了自己特定的任務調度模塊,用來將任務實際調度給對應的計算資源。接下來重點介紹下YARN cluster模式的實現原理和實現細節。

YARN cluster運行模式的內部實現原理

Spark有多種運行模式,在這里主要介紹下YARN cluster模式的內部實現原理。如下圖是YARN cluster模式的原理框圖,相對於其他模式,該模式比較特殊的是它需要由外部程序輔助啟動APP。用戶的應用程序通過輔助的YARN Client類啟動。YARN cluster模式和YARN client模式的區別在於:YARN client模式的AM是運行在提交任務的節點,而YARN cluster模式的AM是由YARN在集群中選取一個節點運行,不一定是在提交任務的節點運行。例如spark-shell如果需要使用YARN模式運行,只能為yarn-client模式,啟動命令可以使用spark-shell --master yarn-client

圖3-9 YARN cluster模式邏輯架構框圖

Client類通過YARN Client API提交請求,在Hadoop集群上啟動一個Spark ApplicationMaster,Spark ApplicationMaster首先注冊自己為一個YARN ApplicationMaster,之后啟動用戶程序,SparkContext在用戶程序中初始化時,使用CoarseGrainedSchedulerBackend配合YARNClusterScheduler,YARNClusterScheduler只是對TaskSchedulerImpl的一個簡單包裝,增加了對Executor的等待邏輯等。

根據Client類傳遞的參數,Spark ApplicationMaster通過YARN ResourceManager/NodeManager的接口在集群中啟動若干個Container,用於運行CoarseGrainedExecutorBackend.CoarseGrainedExecutorBackend在啟動過程中會向CoarseGrainedSchedulerBackend注冊。

CoarseGrainedSchedulerBackend是一個基於Akka Actor實現的粗粒度的資源調度類,在整個Spark作業運行期間,CoarseGrainedSchedulerBackend主要負責如下功能:

  • 監聽並持有注冊給它的Executor資源
  • 根據現有的Executor資源,進行Executor的注冊、狀態更新、相應Scheduler的請求等任務的調度

 


免責聲明!

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



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