spark job, stage ,task介紹。

1. spark 如何執行程序?app

首先看下spark 的部署圖:oop

 

 節點類型有:spa

1. master 節點: 常駐master進程,負責管理所有worker節點。blog

2. worker 節點: 常駐worker進程,負責管理executor 並與master節點通訊。進程

dirvier:官方解釋爲: The process running the main() function of the application and creating the SparkContext。即理解爲用戶本身編寫的應用程序內存

Executor:執行器:hadoop

  在每一個WorkerNode上爲某應用啓動的一個進程,該進程負責運行任務,而且負責將數據存在內存或者磁盤上,每一個任務都有各自獨立的Executor。部署

  Executor是一個執行Task的容器。它的主要職責是:it

  一、初始化程序要執行的上下文SparkEnv,解決應用程序須要運行時的jar包的依賴,加載類。spark

  二、同時還有一個ExecutorBackend向cluster manager彙報當前的任務狀態,這一方面有點相似hadoop的tasktracker和task。

  總結:Executor是一個應用程序運行的監控和執行容器。Executor的數目能夠在submit時,由 --num-executors (on yarn)指定.

 

Job

  

  包含不少task的並行計算,能夠認爲是Spark RDD 裏面的action,每一個action的計算會生成一個job。

  用戶提交的Job會提交給DAGScheduler,Job會被分解成Stage和Task。

 

Stage:

  

  一個Job會被拆分爲多組Task,每組任務被稱爲一個Stage就像Map Stage, Reduce Stage

  Stage的劃分在RDD的論文中有詳細的介紹,簡單的說是以shuffle和result這兩種類型來劃分。在Spark中有兩類task,一類是shuffleMapTask,一類是resultTask,第一類task的輸出是shuffle所需數據,第二類task的輸出是result,stage的劃分也以此爲依據,shuffle以前的全部變換是一個stage,shuffle以後的操做是另外一個stage。好比 rdd.parallize(1 to 10).foreach(println) 這個操做沒有shuffle,直接就輸出了,那麼只有它的task是resultTask,stage也只有一個;若是是rdd.map(x => (x, 1)).reduceByKey(_ + _).foreach(println), 這個job由於有reduce,因此有一個shuffle過程,那麼reduceByKey以前的是一個stage,執行shuffleMapTask,輸出shuffle所需的數據,reduceByKey到最後是一個stage,直接就輸出結果了。若是job中有屢次shuffle,那麼每一個shuffle以前都是一個stage。

 

Task

  即 stage 下的一個任務執行單元,通常來講,一個 rdd 有多少個 partition,就會有多少個 task,由於每個 task 只是處理一個 partition 上的數據.

  每一個executor執行的task的數目, 能夠由submit時,--num-executors(on yarn) 來指定。

相關文章
相關標籤/搜索