日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理解spark中的job、stage、task

發(fā)布時間:2025/1/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解spark中的job、stage、task 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是Spark?

Spark是處理大數(shù)據(jù)常用的計算引擎。Spark是一個用來實現(xiàn)快速而通用的集群計算的平臺。擴展了廣泛使用的MapReduce計算模型,而且高效地支持更多的計算模式,包括交互式查詢和流處理。和MapReduce相比,spark支持內(nèi)存計算,一般比MapReduce更高效。

一般我們在提交spark任務的時候,都會去其UI界面查看任務運行狀況。其中就有job、stage、task的一些執(zhí)行進度展示。今天,就詳細說明一下這些名詞術語的含義。

Job

spark中的數(shù)據(jù)都是抽象為RDD的,它支持兩種類型的算子操作:Transformation和Action。Transformation算子的代碼不會真正被執(zhí)行。只有當我們的程序里面遇到一個action算子的時候,代碼才會真正的被執(zhí)行。

Transformation算子主要包括:map、mapPartitions、flatMap、filter、union、groupByKey、repartition、cache等。

Action算子主要包括:reduce、collect、show、count、foreach、saveAsTextFile等。

當在程序中遇到一個action算子的時候,就會提交一個job,執(zhí)行前面的一系列操作。因此平時要注意,如果聲明了數(shù)據(jù)需要cache或者persist,但在action操作前釋放掉的話,該數(shù)據(jù)實際上并沒有被緩存。

通常一個任務會有多個job,job之間是按照串行的方式執(zhí)行的。一個job執(zhí)行完成后,才會起下一個job。有一段時間曾想讓job并行執(zhí)行,但沒有找到解決方法。

Stage

一個job通常包含一個或多個stage。各個stage之間按照順序執(zhí)行。上面已經(jīng)說過,一個job會有多個算子操作。這些算子都是將一個父RDD轉(zhuǎn)換成子RDD。這個過程中,會有兩種情況:父RDD中的數(shù)據(jù)是否進入不同的子RDD。如果一個父RDD的數(shù)據(jù)只進入到一個子RDD,比如map、union等操作,稱之為narrow dependency(窄依賴)。否則,就會形成wide dependency( 寬依賴),一般也成為shuffle依賴,比如groupByKey等操作。

job中stage的劃分就是根據(jù)shuffle依賴進行的。shuffle依賴是兩個stage的分界點。shuffle操作一般都是任務中最耗時耗資源的部分。因為數(shù)據(jù)可能存放在HDFS不同的節(jié)點上,下一個stage的執(zhí)行首先要去拉取上一個stage的數(shù)據(jù)(shuffle read操作),保存在自己的節(jié)點上,就會增加網(wǎng)絡通信和IO。Shuffle操作其實是一個比較復雜的過程,這里暫且不表。

Task

一個spark application提交后,陸續(xù)被分解為job、stage,到這里其實還是一個比較粗的概念。Stage繼續(xù)往下分解,就是Task。Task應該是spark最細的執(zhí)行單元了。Task的數(shù)量其實就是stage的并行度。

RDD在計算的時候,每個分區(qū)都會起一個task,所以rdd的分區(qū)數(shù)目決定了總的的task數(shù)目。每個Task執(zhí)行的結(jié)果就是生成了目標RDD的一個partiton。在Map階段partition數(shù)目保持不變。在Reduce階段,RDD的聚合會觸發(fā)shuffle操作,聚合后的RDD的partition數(shù)目跟具體操作有關,例如repartition操作會聚合成指定分區(qū)數(shù)。coalesce算子同樣可以改變partition的數(shù)目,不過只能減少不能增加。repartition和coalesce算子的區(qū)別在于前者會引發(fā)shuffle,后者則不會。

到這里,基本上介紹完了job、stage、task的一些特性。

總結(jié)

以上是生活随笔為你收集整理的理解spark中的job、stage、task的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。