Spark 核心概念

Spark 核心概念

Application:用戶編寫的Spark應用程序,包含驅動程序(Driver)和分佈在集群中多個節點上運行的Executor代碼,在執行過程中有一個或多個作業組成。

Driver:一個Spark作業運行時會啟動一個Driver進程,也是作業的主進程,負責作業的解析、生成Stage,並調度Task到Executor上。Spark中的Driver即運行Application的main函數並且創建SparkContext,其中創建SparkContext的目的是為了準備Spark應用程序的運行環境。當Executor運行完畢後,Driver負責將SparkContext關係。 Cluster Manager:在集群上獲取資源的外部服務,目前支持一下幾種

  • Standalone:Spark原生的資源管理,由Master負責資源的管理。
  • Hadoop Yarn:有Yarn中的ResourceManager負責資源的管理。
  • Mesos:由Mesos中的Mesos Master負責資源的管理。

Master:Spark有Master和Worker。Master是集群的領導者,負責管理集群資源,接受Client提交的作業,以及向Worker發送命令。在Spark on Yarn模式中指得是NodeManager節點。

Worker:集群中的Worker,執行Master發送的指令,來具體分配資源,並在這些資源中執行任務。

Executor:真正執行作業的地方。Executor分佈在集群中的Worker上,每個Executor接受Driver的命令來加載和運行Task,一個Executor可以執行一到多個Task。

SparkContext:是程序運行調度的核心,由高層調度器DAGScheduler劃分程序的每個階段,底層調度器TaskScheduler劃分每個階段的具體任務。SchedulerBackend管理整個集群,為正在運行的程序分配計算資源Executor。負責與ClusterManager通信,進行資源的申請、任務的分配和監控等。

DAGScheduler:負責高層調度,劃分stage並生成程序運行的有向無環如。

TaskScheduler:負責具體stage內部的底層調度,具體task的調度、容錯等。

Job:是Top-level的工作單位,每個Action算子都會觸發一次Job,一個Job可能包含一個或多個Stage。

Stage:是用來計算中間結果的Tasksets。Tasksets中的Task邏輯對於同一個RDD內的不同partition都一樣。Stage在Shuffle的地方產生,此時下一個Stage要用到上一個Stage的全部數據,所以要等到上一個Stage全部執行完才能開始。Stage有兩種:ShuffleMapStage和ResultStage,除了最後一個Stage是ResultStage外,其他的Stage都是ShuffleMapStage。ShuffleStageMap會產生中間結果,以文件的方式保存在集群裡,Stage經常被不同的Job共享,前提是這些Job重用了同一個RDD。

Task:任務執行的工作單元,每個Task會被髮送到一個節點上,每個Task對應RDD的一個partition。

RDD:是不可變的、Lazy級別的、粗粒度(數據集級別而不是單個數據級別的)數據集合,包含了一個或多個數據分片,即partition。

算子:Spark程序中有兩種級別的算子:Transformation和Action。Transformation算子會有DAGScheduler劃分到pipeline中,是Lazy級別的,不會觸發任務的執行。Action算子會觸發Job來執行pipeline中的運算。


分享到:


相關文章: