mapreduce中map數的測試
阿新 • • 發佈:2018-02-21
1.5 nbsp 啟動 小時 修改 cor core mar 並行
默認的map數是有邏輯的split的數量決定的,根據源碼切片大小的計算公式:Math.max(minSize, Math.min(maxSize, blockSize));
其中:
minsize:默認值:1 配置參數: mapreduce.input.fileinputformat.split.minsize maxsize:默認值:Long.MAXValue 配置參數:mapreduce.input.fileinputformat.split.maxsize blocksize:值為hdfs的對應文件的blocksize
可知,當未對minsize和maxsize做任何修改的情況下,可知默認切片大小為:blocksize大小。
這裏需要說明的是,只有當一個文件的大小超過了切片大小時才會被邏輯切分,如果沒有超過切片大小則會自成一個分片,(如hdfs的blocksize大小為128MB,分別有大小為20MB,200MB的兩個文件,
那麽默認將會產生三個切片,分別為20MB,128MB和72MB,也就是說會有3個map來處理),所以如果想增大map個數(也就是提高並行度,減少每個map處理的任務量),就可以將大文件切分成多個小文件
來處理(不是說小文件越多越好,這裏還要綜合考慮,比如隊列資源,task調度的效率的影響)。
例如:一個隊列有120個可以使用的core,當可以全量使用這些資源時且總文件大小又沒有那麽大(128MB*120),就可以考慮將這個文件分割成120個小文件,這樣邏輯上就是120個切片,可以同時啟動120個map
來運行,相比(文件大小/128MB)個map來說對資源的利用率要高。
mapreduce中map數的測試