Spark 分割槽 任務等概念總結

2021-09-25 18:07:40 字數 2240 閱讀 1993

spark隱式建立由操作組成的邏輯上的有向無環圖。驅動器執行時,它會把這個邏輯圖轉換為物理執行計畫,然後將邏輯計畫轉換為一系列的步驟(stage),每個步驟由多個任務組成。

步驟組成任務、資料組成任務。所以資料和對資料的操作都封裝在任務裡面了?資料是分布的,那麼步驟的執行是什麼過程?因為是流水線操作,所以對於每乙個工作節點,都有乙份步驟,然後根據步驟一步步計算???

spark文件中使用驅動器節點和執行器節點的概念來描述執行spark的程序

主節點(master)和工作節點(worker)的概念被用來分別表述集群管理器中的中心化部分和分布式部分。

輸入以多個檔案的形式儲存在hdfs上,每個file都包含了很多塊,成為block

如果輸入只有乙個檔案儲存在hbase裡,也是按塊大小分布儲存的嗎?

以塊形式儲存的檔案可以跨節點嘛?

spark讀取檔案作為輸入時,會根據具體資料格式對應的inputformat進行解析,一般是將若干個block合併為乙個輸入分片,成為inputsplit。inputsplit不能跨檔案。

隨後為這些輸入分片生成具體的task。inputsplit與task是一一對應的關係

隨後這些具體的task每個都會被分配到集群上的某個節點的某個ececutor去執行

每個節點可以起乙個或多個executor

executor就是執行器節點嘛?所以每個工作節點(主機)可以有多個執行器?

每個executor由若干個core組成,每個executor的每個core(虛擬core,可以理解為乙個executor的工作執行緒)一次只能執行乙個task

每個task執行的結果就是生產了目標rdd的乙個partition

task執行的併發度 = executor的個數 * executor的核數

partition的數目:

資料讀入階段。例如sc.textfile,輸入檔案劃分為多少個inputspliter就會需要多少的初始task

map階段partition不變

reduce階段,rdd會觸發shuffle操作,聚合後的rdd的partition數目根具體的操作有關

rdd在計算的時候,每乙個分割槽都會起乙個task,所以rdd的分割槽數目決定了總的task數目

比如rdd有100個分割槽,那麼計算的時候就會生成100個task,你的資源配置為10個計算節點,每個兩2個核,同一時刻可以並行的task數目為20,計算這個rdd就需要5個輪次。

如果計算資源不變,你有101個task的話,就需要6個輪次,在最後一輪中,只有乙個task在執行,其餘核都在空轉。

如果資源不變,你的rdd只有2個分割槽,那麼同一時刻只有2個task執行,其餘18個核空轉,造成資源浪費。這就是在spark調優中,增大rdd分割槽數目,增大任務並行度的做法。

spark的driver、job和stage

csdn jwlee

例子說明

其中紅色虛線表示輸入和輸出,藍色實線是對rdd的操作,圓圈中的數字對應了以上的8個步驟。接下來解釋driver program, job和stage這幾個概念:

通常action對應了job,而transformation對應了stage

官方解釋如下(分割槽數、task數目、core數目、worker節點數目、executor數目梳理

三、理解從hdfs讀入檔案預設是怎樣分割槽的

spark從hdfs讀入檔案的分割槽數預設等於hdfs檔案的塊數(blocks),hdfs中的block是分布式儲存的最小單元。如果我們上傳乙個30gb的非壓縮的檔案到hdfs,hdfs預設的塊容量大小128mb,因此該檔案在hdfs上會被分為235塊(30gb/128mb);spark讀取sparkcontext.textfile()讀取該檔案,預設分割槽數等於塊數即235。

四、如何設定合理的分割槽數

1、分割槽數越多越好嗎?

不是的,分割槽數太多意味著任務數太多,每次排程任務也是很耗時的,所以分割槽數太多會導致總體耗時增多。

2、分割槽數太少會有什麼影響?

分割槽數太少的話,會導致一些結點沒有分配到任務;另一方面,分割槽數少則每個分割槽要處理的資料量就會增大,從而對每個結點的記憶體要求就會提高;還有分割槽數不合理,會導致資料傾斜問題。

3、合理的分割槽數是多少?如何設定?

總核數=executor-cores * num-executor

spark更改分割槽 Spark中的分割槽方法詳解

一 spark資料分割槽方式簡要 在spark中,rdd resilient distributed dataset 是其最基本的抽象資料集,其中每個rdd是由若干個partition組成。在job執行期間,參與運算的partition資料分布在多台機器的記憶體當中。這裡可將rdd看成乙個非常大的陣...

ubuntu下swap分割槽 boot分割槽 概念理解

swap是linux下的虛擬記憶體分割槽,作用是在物理記憶體使用完成之後,將磁碟空間 也即swap分割槽 虛擬成記憶體來使用。swap和windows系統的交換檔案作用類似,但是它是一段連續的磁碟空間,並且對使用者不可見。swap分割槽能夠作為 虛擬 的記憶體,但其速度比物理記憶體慢,因此若需要更快...

spark分割槽器

spark的分割槽器 只有涉及到 key value 型別的rdd才會用到分割槽器,因為分割槽是以key分割槽的 spark中分割槽器直接決定了rdd中分割槽的個數 rdd中每條資料經過shuffle過程屬於哪個分割槽和reduce的個數。a hashpartitioner 預設分割槽器 hash分...