您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Spark分區(qū)并行度決定機(jī)制”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Spark分區(qū)并行度決定機(jī)制”吧!
大家都知道Spark job中最小執(zhí)行單位為task,合理設(shè)置Spark job每個(gè)stage的task數(shù)是決定性能好壞的重要因素之一,但是Spark自己確定最佳并行度的能力有限,這就要求我們?cè)诹私馄渲袃?nèi)在機(jī)制的前提下,去各種測(cè)試、計(jì)算等來(lái)最終確定最佳參數(shù)配比。
對(duì)于通過(guò)SparkContext的parallelize方法或者makeRDD生成的RDD分區(qū)數(shù)可以直接在方法中指定,如果未指定,則參考spark.default.parallelism的參數(shù)配置。下面是默認(rèn)情況下確定defaultParallelism的源碼:
override def defaultParallelism(): Int = {
conf.getInt("spark.default.parallelism", math.max(totalCoreCount.get(), 2))
}
通常,RDD的分區(qū)數(shù)與其所依賴(lài)的RDD的分區(qū)數(shù)相同,除非shuffle。但有幾個(gè)特殊的算子:
1.coalesce和repartition算子
筆者先放兩張關(guān)于該coalesce算子分別在RDD和DataSet中的源碼圖:(DataSet是Spark SQL中的分布式數(shù)據(jù)集,后邊說(shuō)到Spark時(shí)再細(xì)講)
通過(guò)coalesce源碼分析,無(wú)論是在RDD中還是DataSet,默認(rèn)情況下coalesce不會(huì)產(chǎn)生shuffle,此時(shí)通過(guò)coalesce創(chuàng)建的RDD分區(qū)數(shù)小于等于父RDD的分區(qū)數(shù)。
筆者這里就不放repartition算子的源碼了,分析起來(lái)也比較簡(jiǎn)單,圖中我有所提示。但筆者建議,如下兩種情況,請(qǐng)使用repartition算子:
coalesce默認(rèn)不觸發(fā)shuffle,即使調(diào)用該算子增加分區(qū)數(shù),實(shí)際情況是分區(qū)數(shù)仍然是當(dāng)前的分區(qū)數(shù)。
2.union算子
多個(gè)父RDD具有相同的分區(qū)器,union后產(chǎn)生的RDD的分區(qū)器與父RDD相同且分區(qū)數(shù)也相同。比如,n個(gè)RDD的分區(qū)器相同且是defined,分區(qū)數(shù)是m個(gè)。那么這n個(gè)RDD最終union生成的一個(gè)RDD的分區(qū)數(shù)仍是m,分區(qū)器也是相同的
通過(guò)上述coalesce、repartition、union算子介紹和源碼分析,很容易分析cartesian算子的源碼。通過(guò)cartesian得到RDD分區(qū)數(shù)是其父RDD分區(qū)數(shù)的乘積。
在Spark SQL中,任務(wù)并行度參數(shù)則要參考spark.sql.shuffle.partitions,筆者這里先放一張圖,詳細(xì)的后面講到Spark SQL時(shí)再細(xì)說(shuō):
看下圖在Spark流式計(jì)算中,通常將SparkStreaming和Kafka整合,這里又分兩種情況:
1.Receiver方式生成的微批RDD即BlockRDD,分區(qū)數(shù)就是block數(shù)
到此,相信大家對(duì)“Spark分區(qū)并行度決定機(jī)制”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。