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 ...