1. 程式人生 > >MapReduce 並行度機制(一)MapTask 並行度機制

MapReduce 並行度機制(一)MapTask 並行度機制

MapTask 並行度機制

MapTask 的並行度指的是 map 階段有多少個並行的 task 共同處理任務。map階段的任務處理並行度,勢必影響到整個 job 的處理速度。那麼,MapTask 並行例項是否越多越好呢?其並行度又是如何決定呢?

一個 MapReducejob 的 p map 階段並行度由客戶端在提交 b job 時決定,即客戶端提交 job 之前會對待處理資料進行 邏輯切片。切片完成會形成 切片規劃 檔案( job.split) ),每個邏輯切片最終對應啟動一個 maptask。邏輯切片機制由 FileInputFormat 實現類的 getSplits()方法完成。

FileInputFormat 切片機制

FileInputFormat 中預設的切片機制:
A. 簡單地按照檔案的內容長度進行切片
B. 切片大小,預設等於 block 大小
C. 切片時不考慮資料集整體,而是逐個針對每一個檔案單獨切片

比如待處理資料有兩個檔案:
file1.txt 320M
file2.txt 10M
經過 FileInputFormat 的切片機制運算後,形成的切片資訊如下:
file1.txt.split1—0M~128M
file1.txt.split2—128M~256M
file1.txt.split3—256M~320M
file2.txt.split1—0M~10M

FileInputFormat 中切片的大小的引數配置
在 FileInputFormat 中,計算切片大小的邏輯:
Math.max(minSize, Math.min(maxSize, blockSize));
切片主要由這幾個值來運算決定:
minsize:預設值:1
配置引數: mapreduce.input.fileinputformat.split.minsize
maxsize:預設值:Long.MAXValue
配置引數:mapreduce.input.fileinputformat.split.maxsize
blocksize
因此, 預設情況下, split size =block size,在 hadoop 2.x 中為128M。
maxsize(切片最大值):引數如果調得比 blocksize 小,則會讓切片變小,而且就等於配置的這個引數的。
minsize (切片最小值):引數調的比 blockSize 大,則可以讓切片變得比blocksize 還大。
但是,不論怎麼調引數,都不能讓多個小檔案“劃入”一個 split 。
還有個細節就是:
當 bytesRemaining/splitSize > 1.1 不滿足的話,那麼最後所有剩餘的會作為一個切片。從而不會形成例如 129M 檔案規劃成兩個切片的局面。

喜歡就點贊評論+關注吧

這裡寫圖片描述

感謝閱讀,希望能幫助到大家,謝謝大家的支援!