黑猴子的家 Spark RDD 相關概念關係

2021-09-27 11:03:35 字數 1213 閱讀 7234

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

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

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

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

(1)每個節點可以起乙個或多個executor。

(2)每個executor由若干core組成,每個executor的每個core一次只能執行乙個task。

(3)每個task執行的結果就是生成了目標rdd的乙個partiton。

注意: 這裡的core是虛擬的core而不是機器的物理cpu核,可以理解為就是executor的乙個工作執行緒

而 task被執行的併發度 = executor數目 * 每個executor核數。

至於partition的數目

(1)對於資料讀入階段,例如sc.textfile,輸入檔案被劃分為多少inputsplit就會需要多少初始task。

(2)在map階段partition數目保持不變。

(3)在reduce階段,rdd的聚合會觸發shuffle操作,聚合後的rdd的partition數目跟具體操作有關,例如repartition操作會聚合成指定分割槽數,還有一些運算元是可配置的。

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

申請的計算節點(executor)數目和每個計算節點核數,決定了你同一時刻可以並行執行的task。

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

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

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

黑猴子的家 Spark RDD 為什麼會產生

rdd是spark的基石,是實現spark資料處理的核心抽象。hadoop的mapreduce是一種基於資料集的工作模式,面向資料,這種工作模式一般是從儲存上載入資料集,然後運算元據集,最後寫入物理儲存裝置。資料更多面臨的是一次性處理。mr的這種方式對資料領域兩種常見的操作不是很高效。第一種是迭代式...

黑猴子的家 Redis 相關知識

1 redis埠6379從何而來 2 redis資料庫 預設資料庫 預設16個資料庫,類似陣列下標從0開始,初始預設使用0號庫 使用命令 select 來切換資料庫。如 select 8 統一密碼管理,所有庫都是同樣密碼,要麼都ok,要麼乙個也連線不上 切換資料庫 127.0.0.1 6379 se...

黑猴子的家 Hadoop Checkpoint機制

fsimage和edit log合併的過程如下圖所示 其實這個合併過程是乙個很耗i o與cpu的操作,並且在進行合併的過程中肯定也會有其他應用繼續訪問和修改hdfs檔案。所以,這個過程一般不是在單一的namenode節點上進行從。如果hdfs沒有做ha的話,checkpoint由secondname...