[第十四章]Spark Shuffle的原理剖析_1

本章節(jié)主要是剖析Shuffle原理,spark中的Shuffle是非常重要的,shuffle不管在Hadoop中還是Spark中都是重重之重,特別是在Spark shuffle優(yōu)化的時(shí)間。更是非常的重要。

那么在什么情況下,會(huì)發(fā)生Shuffle操作呢,一般在reduceByKey,groupByKey,sortBykey,countBykey,join,cogroup等函數(shù)的下都會(huì)發(fā)生Shuffle.
這里我舉個(gè)例子來(lái)說(shuō)明什么是Shuffle,它的原理是什么。

假設(shè)我們的一個(gè)節(jié)點(diǎn)A上,運(yùn)行了4個(gè)ShuffleMapTask,但節(jié)點(diǎn)上只有兩個(gè)cpu cores.

那么是不是這4個(gè)ShuffleMapTask是并發(fā)操作,其中兩個(gè)是并行操作。這是基礎(chǔ)知識(shí)就不用說(shuō)了。

假設(shè)在另一個(gè)節(jié)點(diǎn)B上,運(yùn)行了4個(gè)ResultTask(關(guān)于什么是shuffleMapTask,resultTask,
我們前面都已經(jīng)詳細(xì)說(shuō)過(guò),這里就不說(shuō)了)

現(xiàn)在在節(jié)點(diǎn)B上,等著去獲取節(jié)點(diǎn)A上ShuffleMapTask的輸出數(shù)據(jù),來(lái)完成一個(gè)reduceBykey操作。

我們知道,每個(gè)ShuffleMapTask都會(huì)為每一個(gè)ResultTask創(chuàng)建一份bucket緩沖,以及對(duì)應(yīng)的ShuffleBlockFile文件到磁盤(pán)上。
那么這樣,我們想一想,我們這個(gè)例子,是不是每一個(gè)ShuffleMapTask都會(huì)生成4個(gè)bucket,4個(gè)blockFile文件。

Paste_Image.png

每個(gè)bucket,是一個(gè)緩沖區(qū),當(dāng)數(shù)據(jù)慢慢達(dá)到一定值時(shí),會(huì)自動(dòng)刷新到ShuffleBockFile文件里到磁盤(pán)。
ShuffleMapTask的輸出會(huì)做為MapStatus對(duì)象,發(fā)送到DAGScheduler的MapoutATrackerMaster中。

那么ResultTask就會(huì)用BlockstoreShuffleFetcher從MapoutATrackerMaster中讀取信息,ShuffleMapTask的輸出會(huì)做為MapStatus包含了每個(gè)ResultTask要拉取的數(shù)據(jù)的大小 ,位置等,就是元數(shù)據(jù)。
那么每個(gè)resultTask是不是根據(jù)這些信息底層通過(guò)BlockManager去每個(gè)ShuffleMapTask上的ShuffleBlockFile上拉取屬于自己的那一份數(shù)據(jù)。把數(shù)據(jù)拉取過(guò)來(lái)。

1:在map端的RDD,我們可以看作是shuffle的第一個(gè)RDD,就是mapPartitionRDD    
2: 每個(gè)ResultTaskr拉取過(guò)來(lái)的數(shù)據(jù),其實(shí)就會(huì)組成一個(gè)內(nèi)部RDD,
    這個(gè)RDD就是叫ShuffleRDD,這個(gè)RDD優(yōu)先放入內(nèi)存,內(nèi)存不足時(shí),就       寫(xiě)入磁盤(pán)。
 3: 然后每個(gè)ShuffleRDD進(jìn)行本地聚會(huì),
最后成生一個(gè)MapPartitionRDD,這個(gè)RDD就是我們執(zhí)行reduceByKey后希望得到的rdd.

看到上面的三點(diǎn)我們是不是很熟悉了,前面我們?cè)谥v過(guò)stage劃分時(shí),也講過(guò)Shuffle分了兩步,
一步是MapPartitionRDD-->ShuffleRDD
另一步就是ShuffleRDD-->MapPartitionRDD

上面就我們普通的Shuffle的內(nèi)部原理。我們假設(shè),現(xiàn)在有100個(gè)map task,100個(gè)result task,那么本地磁盤(pán)是不是會(huì)有100*100個(gè)文件,這樣造成了磁盤(pán)IO之多,極大的影響了性能。

下一節(jié)我們就這些問(wèn)題,來(lái)剖析新版本中的優(yōu)化。

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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