Spark分區詳解!DT大數據夢工廠王家林老師親自講解!

Spark分區詳解!DT大數據夢工廠王家林老師親自講解!node


http://www.tudou.com/home/_79823675/playlist?qq-pf-to=pcqq.group dom


1、分片和分區的區別?分佈式

分片是從數據角度,分區是從計算的角度,其實都是從大的狀態,split成小的。ide


2、spark分區理解大數據

rdd做爲一個分佈式的數據集,是分佈在多個worker節點上的。以下圖所示,RDD1有五個分區(partition),他們分佈在了四個worker nodes 上面,RDD2有三個分區,分佈在了三個worker nodes上面。
spa

20049c7cecf2107389107e42881b844e_b.jpg

3、默認分區blog

通常狀況下,是從hdfs文件存儲的block數量做爲分區的大小,但有時候一條記錄誇block,那麼會出現多一個的狀況,並且block會略大於或小於128MB。get


4、從新分區it

想要從新給rdd分區分兩種狀況,建立 RDD 時和經過轉換操做獲得新 RDD 時。spark

對於前者,在調用 textFile 和 parallelize 方法時候手動指定分區個數便可。例如 sc.parallelize(Array(1, 2, 3, 5, 6), 2) 指定建立獲得的 RDD 分區個數爲 2。


對於後者,直接調用rdd.repartition方法就能夠了,若是想具體控制哪些數據分佈在哪些分區上,能夠傳一個Ordering進去。好比說,我想要數據隨機地分佈成10個分區,能夠:

class MyOrdering[T] extends Ordering[T]{
 def compare(x:T,y:T) = math.random compare math.random
}

// 假設數據是Int類型的
rdd.repartition(10)(new MyOrdering[Int])



實際上分區的個數是根據轉換操做對應多個 RDD 之間的依賴關係來肯定,窄依賴子 RDD 由父 RDD 分區個數決定,例如 map 操做,父 RDD 和子 RDD 分區個數一致;Shuffle 依賴則由分區器(Partitioner)決定,例如 groupByKey(new HashPartitioner(2)) 或者直接 groupByKey(2) 獲得的新 RDD 分區個數等於 2。

相關文章
相關標籤/搜索