在map階段讀取資料前,fileinputformat會將輸入檔案分割成split。split的個數決定了
map的個數。
影響map個數,即split個數的因素主要有:
1)hdfs塊的大小,即hdfs中dfs.block.size的值。如果有乙個輸入檔案為1024m,當塊為
256m時,會被劃分為4個split;當塊為128m時,會被劃分為8個split。
2)檔案的大小。當塊為128m時,如果輸入檔案為128m,會被劃分為1個split;當塊為256m,
會被劃分為2個split。
3)檔案的個數。fileinputformat按照檔案分割split,並且只會分割大檔案,即那些大小超過
hdfs塊的大小的檔案。如果hdfs中dfs.block.size設定為64m,而輸入的目錄中檔案有100個,則
劃分後的split個數至少為100個。
4)splitsize的大小。分片是按照splitszie的大小進行分割的,乙個split的大小在沒有設定的情況下,
預設等於hdfs block的大小。但應用程式可以通過兩個引數來對splitsize進行調節。
map個數的計算公式如下:
1,splitsize=max(minimumsize,min(maximumsize,blocksize))。如果沒有設定minimumsize和maximumsize
,splitsize的大小預設等於blocksize
2,計算公式
計算過程可以簡化為如下的公式,詳細演算法可以參照fileinputsplit類中的getsplits方法
total_split ;
for(file :輸入目錄中的每個檔案)
total_split+=file_split;
}
MapReduce中的map個數
在map階段讀取資料前,fileinputformat會將輸入檔案分割成split。split的個數決定了 map的個數。影響map個數 split個數 的主要因素有 1 檔案的大小。當塊 dfs.block.size 為128m時,如果輸入檔案為128m,會被劃分為1個split 當塊為256m,...
mapreduce中map和reduce個數
一 控制hive任務中的map數 1.通常情況下,作業會通過input的目錄產生乙個或者多個map任務。主要的決定因素有 input的檔案總個數,input的檔案大小,集群設定的檔案塊大小 目前為128m,可在hive中通過set dfs.block.size 命令檢視到,該引數不能自定義修改 2....
mapreduce中MAP數量如何控制?
一 果斷先上結論 1.如果想增加map個數,則設定mapred.map.tasks 為乙個較大的值。2.如果想減小map個數,則設定mapred.min.split.size 為乙個較大的值。3.如果輸入中有很多小檔案,依然想減少map個數,則需要將小檔案merger為大檔案,然後使用準則2。二 原...