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