maper數量控制
- 決定參數
- 配置參數
- mapreduce.input.fileinputformat.split.minsize //啓動map最小的split size大小,默認0
- mapreduce.input.fileinputformat.split.maxsize //啓動map最大的split size大小,默認256M
- dfs.block.size //block塊大小,默認64M
- mapreduce.job.maps //顯示設定的期望的mapper的數量
- 計算公式:splitSize = Math.max(minSize, Math.min(maxSize, blockSize));
- 輸入文件數目與單個文件大小
- 不進行顯式設定 splitSize 和 mapper 數量參數時,通常一個文件分配給一個獨立的mapper
- 顯式設定了參數時
- 若只顯式設定 splitSize 或 mapper數量 中的一個
- Hadoop並不會按照設定的參數進行分片大小和mapper數量的設置,而是按照blocksize的大小進行切分和創建mapper
- 若同時顯式設定了 splitSize 和 mapper 數量
- 此時會按照設定的 splitSize 大小進行設置分片,而 mapper 的數量並不一定與顯式設定的 mapper 數量一致,而是對輸入的文件大小和數量按照顯式設定的 splitSize 的大小對輸入文件切分後所得的 mapper 數量
- 對輸入文件進行切分時
- 若單個文件大小 < splitSize,則該單個文件將分配給一個獨立的mapper
- 若單個文件大小 > splitSize,則將該文件按照splitSize大小拆分後分給多個mapper
- 若單個文件切分後最後剩餘的部分 < splitSize,則該分部也會被分配給一個獨立的mapper,即一個split不會跨越兩個文件
- 若只顯式設定 splitSize 或 mapper數量 中的一個
- 配置參數
- 運行時併發度控制
- 在創建了一定數目的 mapper 後,若要控制運行時併發度,可以通過如下參數進行
- mapreduce.job.running.map.limit
- 在參數可以實現控制在同一時刻處於running狀態的mapper數量,是實際運行時的併發控制
- 在創建了一定數目的 mapper 後,若要控制運行時併發度,可以通過如下參數進行
reducer 數量控制
- reducer 數量與 partition 數量相同,每個reducer對應生成一個獨立的結果文件(或文件夾)
- reducer 數量默認爲1,即將mapper的處理結果數據合併到一個文件(或文件夾)中
- 如果不需要進行規約處理,將reducer數量設置爲0即可,此時作業的運行速度相對較高