58、Spark性能優(yōu)化之reduceByKey和groupByKey

groupByKey

val counts = pairs.groupByKey().map(wordCounts => (wordCounts._1, wordCounts._2.sum))


groupByKey工作原理.png

groupByKey的性能,相對(duì)來(lái)說(shuō),是有問(wèn)題的
因?yàn)?,它是不?huì)進(jìn)行本地聚合的,而是原封不動(dòng)的,把ShuffleMapTask的輸出,拉取到ResultTask的內(nèi)存中,所以這樣的話,會(huì)導(dǎo)致,所有的數(shù)據(jù),都要進(jìn)行網(wǎng)絡(luò)傳輸,從而導(dǎo)致網(wǎng)絡(luò)傳輸?shù)男阅荛_(kāi)銷(xiāo)很大
但是,有些場(chǎng)景下,用其他算法實(shí)現(xiàn)不了的,比如reduceByKey,sortByKey,countByKey實(shí)現(xiàn)不了的話,還是只能用groupByKey().map()來(lái)實(shí)現(xiàn),比如可能你需要拿到某個(gè)key對(duì)應(yīng)的所有的value,進(jìn)行自定義的業(yè)務(wù)邏輯處理

reduceByKey

val counts = pairs.reduceByKey(_ + _)


reduceByKey原理.png

HashShuffleWriter的writer()方法,是先判斷了一下,如果是isMapCombined,那么就在本地進(jìn)行聚合,聚合之后,再寫(xiě)入磁盤(pán)文件
對(duì)于,僅僅是要對(duì)key對(duì)應(yīng)的values進(jìn)行聚合為一個(gè)值的場(chǎng)景,用reduceByKey是非常合適的,因?yàn)闀?huì)先在ShuffleMapTask端寫(xiě)入本地磁盤(pán)文件的時(shí)候,進(jìn)行本地聚合,再寫(xiě)入磁盤(pán)文件,此時(shí),就會(huì)導(dǎo)致數(shù)據(jù)量大幅度縮減,甚至可能達(dá)到數(shù)據(jù)量縮減了幾倍,甚至十幾倍、幾十倍的程度
這樣的話,也就相當(dāng)于,ShuffleMapTask端的數(shù)據(jù),傳輸?shù)絉educeTasl端的數(shù)據(jù),數(shù)據(jù)量大幅度縮減,性能大幅度增加,甚至達(dá)到減少數(shù)據(jù)量的時(shí)間,幾倍、十幾倍、幾十倍

如果能用reduceByKey,那就用reduceByKey,因?yàn)樗鼤?huì)在map端,先進(jìn)行本地combine,可以大大減少要傳輸?shù)絩educe端的數(shù)據(jù)量,減小網(wǎng)絡(luò)傳輸?shù)拈_(kāi)銷(xiāo)。
只有在reduceByKey處理不了時(shí),才用groupByKey().map()來(lái)替代。

?著作權(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)容

  • 1.1、 分配更多資源 1.1.1、分配哪些資源? Executor的數(shù)量 每個(gè)Executor所能分配的CPU數(shù)...
    miss幸運(yùn)閱讀 3,284評(píng)論 3 15
  • 前言 繼基礎(chǔ)篇講解了每個(gè)Spark開(kāi)發(fā)人員都必須熟知的開(kāi)發(fā)調(diào)優(yōu)與資源調(diào)優(yōu)之后,本文作為《Spark性能優(yōu)化指南》的...
    Alukar閱讀 960評(píng)論 0 2
  • 在我們目睹國(guó)家面臨的可悲情況(指美國(guó)總統(tǒng)克林頓的緋聞案),想到這些事是如何發(fā)生時(shí),也許會(huì)問(wèn)自己一些問(wèn)題,在我...
    董青青閱讀 268評(píng)論 0 0
  • 一、基本語(yǔ)法 二、變量 三、運(yùn)算符 四、分支結(jié)構(gòu) 五、循環(huán)結(jié)構(gòu) 六、函數(shù)
    憧憬001閱讀 166評(píng)論 0 0
  • 生活不只是眼前的茍且,還有詩(shī)和遠(yuǎn)方,遠(yuǎn)方,也有過(guò)去的時(shí)光 夜晚不只是我一個(gè)人的,夢(mèng)到了,醒了,再睡,哪里還...
    Phyllis一閱讀 88評(píng)論 0 0

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