理解Spark中Job-Stage-Task之間的關(guān)系

Spark-Job-Stage-Task之間的關(guān)系

基本概念

在開(kāi)始之前需要先了解Spark中Application,Job,Stage等基本概念,官方給出的解釋如下表:

Term Meaning
Application 用戶(hù)編寫(xiě)的Spark應(yīng)用程序,包括一個(gè)Driver和多個(gè)executors
Application jar 包含用戶(hù)程序的Jar包
Driver Program 運(yùn)行main()函數(shù)并創(chuàng)建SparkContext進(jìn)程
Cluster manager 在集群上獲取資源的外部服務(wù),如standalone manager,yarn,Mesos
deploy mode 部署模式,區(qū)別在于driver process運(yùn)行的位置
worker node 集群中可以運(yùn)行程序代碼的節(jié)點(diǎn)(機(jī)器)
Executor 運(yùn)行在worker node上執(zhí)行具體的計(jì)算任務(wù),存儲(chǔ)數(shù)據(jù)的進(jìn)程
Task 被分配到一個(gè)Executor上的計(jì)算單元
Job 由多個(gè)任務(wù)組成的并行計(jì)算階段,因RDD的Action產(chǎn)生
Stage 每個(gè)Job被分為小的計(jì)算任務(wù)組,每組稱(chēng)為一個(gè)stage
DAGScheduler 根據(jù)Job構(gòu)建基于Stage的DAG,并提交Stage給TaskScheduler
TaskScheduler 將TaskSet提交給worker運(yùn)行,每個(gè)executor運(yùn)行什么task在此分配

Job-Stage-Task之間的關(guān)系

如下圖所示,一個(gè)Spark程序可以被劃分為一個(gè)或多個(gè)Job,劃分的依據(jù)是RDD的Action算子,每遇到一個(gè)RDD的Action操作就生成一個(gè)新的Job。
每個(gè)spark Job在具體執(zhí)行過(guò)程中因?yàn)閟huffle的存在,需要將其劃分為一個(gè)或多個(gè)可以并行計(jì)算的stage,劃分的依據(jù)是RDD間的Dependency關(guān)系,當(dāng)遇到Wide Dependency時(shí)因需要進(jìn)行shuffle操作,這涉及到了不同Partition之間進(jìn)行數(shù)據(jù)合并,故以此為界劃分不同的Stage。
Stage是由Task組組成的并行計(jì)算,因此每個(gè)stage中可能存在多個(gè)Task,這些Task執(zhí)行相同的程序邏輯,只是它們操作的數(shù)據(jù)不同。一般RDD的一個(gè)Partition對(duì)應(yīng)一個(gè)Task,Task可以分為ResultTask和ShuffleMapTask。

image.png

RDD-Partition-Records-Task之間的關(guān)系

通常一個(gè)RDD被劃分為一個(gè)或多個(gè)Partition,Partition是Spark進(jìn)行數(shù)據(jù)處理的基本單位,一般來(lái)說(shuō)一個(gè)Partition對(duì)應(yīng)一個(gè)Task,而一個(gè)Partition中通常包含數(shù)據(jù)集中的多條記錄(Record)。
注意不同Partition中包含的記錄數(shù)可能不同。Partition的數(shù)目可以在創(chuàng)建RDD時(shí)指定,也可以通過(guò)reparation和coalesce等算子重新進(jìn)行劃分。
通常在進(jìn)行shuffle的時(shí)候也會(huì)重新進(jìn)行分區(qū),這是對(duì)于key-valueRDD,Spark通常根據(jù)RDD中的Partitioner來(lái)進(jìn)行分區(qū),目前Spark中實(shí)現(xiàn)的Partitioner有兩種:HashPartitioner和RangePartitioner,當(dāng)然也可以實(shí)現(xiàn)自定義的Partitioner,只需要繼承抽象類(lèi)Partitioner并實(shí)現(xiàn)numPartitions and getPartition(key: Any)即可。

image.png

將上面的概念串聯(lián)起來(lái),可以得到下面的運(yùn)行層次圖:

image.png

Reference:

[1] Spark On Yarn的兩種模式y(tǒng)arn-cluster和yarn-client深度剖析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容