MapReduce分片 分割槽 分組 傻傻分不清

2021-09-26 19:53:27 字數 1415 閱讀 6979

對於hdfs中儲存的乙個檔案,要進行map處理前,需要將它切分成多個塊,才能分配給不同的maptask去執行。分片的數量等於啟動的maptask的數量。預設情況下,分片的大小就是hdfs的blocksize。

blocksize預設大小128m。

可通過設定minsize和maxsize來設定分片的大小。

ps:分片的大小直接影響到maptask的數量,可根據實際的業務需求來調整分片的大小。

在reduce過程中,可以根據實際需求,把map完的資料reduce到不同的檔案中。可通過setnumreducetasks來設定分割槽的個數。

預設mapreduce使用hashpartitioner來進行分割槽。但有時,會造成資料傾斜,那麼我們可以自定義分割槽演算法。

//將小於等於3的key放在乙個分割槽

//等於6的放到乙個分割槽

//剩下其它的放到乙個分割槽

public

class

mypartitioner

extends

partitioner

else

if(key ==6)

else}}

job.

setnumreducetasks(3

);//設定分割槽的個數

job.

setpartitionerclass

(mypartitioner.

class);

//使用自定義分割槽演算法

在分割槽之後,把相同的key放在同一組,並把key的value合併在一起。

也可以自定義分組演算法。

//將left相等的key放在同乙個組

public

class

mygroup

extends

writablecomparator

@override

public

intcompare

(writablecomparable a, writablecomparable b)

}job.

setgroupingcomparatorclass

(mygroup.

class);

//使用自定義分組演算法

終於把分片、分割槽、分組搞清楚了啦。

mapreduce是基於hdfs的分布式計算框架,將大量資料分布到不同的機器上去分別計算最後彙總。把各個環節搞清楚,根據實際的業務需求,再來分析在那個環節進行處理。

如果有任何問題,或者有什麼想法,隨時聯絡我,大家一起交流,共同進步。

我的郵箱 [email protected]

mapreduce原理 分割槽,分組

分析這個原理,的原因是 1 更好的理解mapreduce的過程。2 在二次排序時會用到這個原理,二次排序要重寫分割槽方法,重寫分組方法 如果原理沒搞明白,就無法寫二次排序的 key 預設分割槽 預設分組 自定義分割槽 自定義分組 abc123 1 使用系統預設分割槽方式,是按key 進行分割槽。2 ...

mysql分片 分割槽 mysql分割槽 分片

range分割槽案例 按照日期的年分表,通過year函式獲取分割槽鍵的具體年份,values less 表示少於1991年的放入p0,類推 時間函式,to days和 to seconds 我當前版本5.5支援 可以讓你更精確的分到天甚至秒.partition p3 values less than...

MapReduce中的 分割槽,分組,排序(區別)

2020 7 26 功能 按照條件將結果輸入到不同的檔案中 實現步驟 自定義排序規則繼承partitioner類,重寫getpartition 方法 在job驅動driver中設定自定義排序規則 在driver中根據分割槽數,設定reducetask數 分割槽數和reducetask關係 如果red...