關於RDD分割槽(一)

2021-09-17 21:48:31 字數 748 閱讀 6206

rdd是彈性分布式資料集,通常rdd很大,會被分成很多個分割槽,分別儲存在不同的節點上,作用有二:增加並行度和減少通訊開銷(連線操作),例如下圖:

rdd分割槽原則:

rdd分割槽的乙個原則是使得分割槽的個數盡量等於集群中的cpu核心(core)數目

對於不同的spark部署模式而言(本地模式、standalone模式、yarn模式、mesos模式),都可以通過設定spark.default.parallelism這個引數的值,來配置預設的分割槽數目,一般而言:

*本地模式:預設為本地機器的cpu數目,若設定了local[n],則預設為n,local[*]則自動判斷

*apache mesos:預設的分割槽數為8

*standalone或yarn:在「集群中所有cpu核心數目總和」和「2」二者中取較大值作為預設值

設定分割槽的個數的方法:

建立rdd時手動指定分割槽個數

使用reparititon方法重新設定分割槽個數

自定義分割槽方法:

spark提供了自帶的hashpartitioner(雜湊分割槽)與rangepartitioner(區域分割槽),能夠滿足大多數應用場景的需求。與此同時,spark也支援自定義分割槽方式,即通過提供乙個自定義的partitioner物件來控制rdd的分割槽方式,從而利用領域知識進一步減少通訊開銷。

那麼問題來了:改變分割槽數會影響集群的效率嗎?

RDD分割槽理解

乙個hdfs檔案的rdd將檔案的每個檔案塊表示為乙個分割槽,並且知道每個檔案塊的位置資訊。這些對應著資料塊的分割槽分布到集群的節點中,因此,分割槽的多少涉及對這個rdd進行平行計算的粒度。首先,分割槽是乙個邏輯概念,變換前後的新舊分割槽在物理上可能是同一塊記憶體或者是儲存。需要注意的是,如果沒有指定...

RDD的分割槽數

讓rdd的分割槽數盡量和集群的cpu的核數保持一直,這樣可以充分利用cpu的計算資源。開發中為了更加充分的壓榨cpu的計算資源,會把平行度設定為cpu核數的2 3倍 指令碼引數 api引數 檔案本身分塊數.sc.parallelize list 5,6,4,7,3,8,2,9,1,10 partit...

spark 的RDD分割槽

rdd的倆種建立方 1.從集合中建立rdd,spark主要提供了兩種函式 parallelize和makerdd 使用parallelize 從集合建立 scala val rdd sc.parallelize array 1,2,3,4,5,6,7,8 使用makerdd 從集合建立 scala ...