Spark中Task,Partition,RDD、節(jié)點(diǎn)數(shù)、Executor數(shù)、core數(shù)目的關(guān)系

Spark中關(guān)于并發(fā)度涉及的幾個(gè)概念File,Block,Split,Task,Partition,RDD以及節(jié)點(diǎn)數(shù)、Executor數(shù)、core數(shù)目的關(guān)系。

輸入可能以多個(gè)文件的形式存儲(chǔ)在HDFS上,
每個(gè)File都包含了很多塊,稱為Block。
當(dāng)Spark讀取這些文件作為輸入時(shí),
會(huì)根據(jù)具體數(shù)據(jù)格式對(duì)應(yīng)的InputFormat進(jìn)行解析,
一般是將若干個(gè)Block合并成一個(gè)輸入分片,稱為InputSplit,

注意InputSplit不能跨越文件。隨后將為這些輸入分片生成具體的Task。InputSplit與Task是一一對(duì)應(yīng)的關(guān)系。隨后這些具體的Task每個(gè)都會(huì)被分配到集群上的某個(gè)節(jié)點(diǎn)的某個(gè)Executor去執(zhí)行。
每個(gè)節(jié)點(diǎn)可以起一個(gè)或多個(gè)Executor。

每個(gè)Executor由若干core組成,每個(gè)Executor的每個(gè)core一次只能執(zhí)行一個(gè)Task。

每個(gè)Task執(zhí)行的結(jié)果就是生成了目標(biāo)RDD的一個(gè)partiton。

**注意: **

這里的core是虛擬的core而不是機(jī)器的物理CPU核,可以理解為就是Executor的一個(gè)工作線程。

而 Task被執(zhí)行的并發(fā)度 = Executor數(shù)目 * 每個(gè)Executor核數(shù)。

至于partition的數(shù)目:

對(duì)于數(shù)據(jù)讀入階段,例如sc.textFile,輸入文件被劃分為多少InputSplit就會(huì)需要多少初始Task。

在Map階段partition數(shù)目保持不變。

在Reduce階段,RDD的聚合會(huì)觸發(fā)shuffle操作,聚合后的RDD的partition數(shù)目跟具體操作有關(guān),例如repartition操作會(huì)聚合成指定分區(qū)數(shù),還有一些算子是可配置的。

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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