1. 程式人生 > >Hadoop map任務個數分析

Hadoop map任務個數分析

        Hadoop map任務個數由輸入檔案在HDFS上的分塊個數確定。

        如果一個輸入檔案的大小大於BlockSize,那麼這個輸入檔案被分成的若干個塊,一個塊即是一個split,map任務的個數等於塊(split)的個數。

        如果一個輸入檔案的大小小於BlockSize,則這個檔案就是一個塊(其佔用的儲存空間等於檔案的實際大小),這個輸入檔案將被作為一個map任務的輸入。

        對於要處理大量小檔案的MapReduce程式,由於一個小檔案就需要啟動一個Map task,太多的Map task會造成程式執行效率的低下,可以採用CombineFileInputFormat將多個input path合併成一個InputSplit送給mapper處理,從而減少Map任務的個數。

map個數的計算公式如下:

 splitsize=max(minimumsize,min(maximumsize,blocksize))。

(如果沒有設定minimumsize和maximumsize,splitsize的大小預設等於blocksize)

for(file :輸入目錄中的每個檔案)
{
file_split = 1;
if(file.size>splitsize)
{
file_split=file_size/splitsize;
}
total_split+=file_split;
}