2014-07-19 20 views
5

我知道,可以通過將mapred.min.split.size設置爲dfs.block.size來基於我的dfs分割大小設置映射器的數量。如何根據我的映射器輸出大小動態設置reducer的數量?

similary如何根據我的映射器輸出大小設置減速器的數量?

PS:我知道下面的選項可以用來操縱reducer的數量。 mapred.tasktracker.reduce.tasks.maximum mapred.reduce.tasks

回答

0

如果你想通過設置動態的命令行:: 你可以用下面的選項映射器和減速器的數量:

-D mapred.map.tasks = 5 -D mapred.reduce.tasks = 5

我們還可以設置映射器和減速器的驅動程序代碼的數目: job.setNumMapTasks(); job.setNumReduceTasks();

我不認爲你可以在地圖縮小作業開始後動態地改變縮減器的數量。就我所知,在作業正在運行期間不會有任何提供值的人機交互。它應該被預先配置。 Map Reduce作業是一個批處理過程(運行很長時間),所以用戶很難知道它何時會詢問用戶減速器的數量,並且在此過程中它不會被設計爲交互式的!希望你有答案!

+0

@Merla:謝謝你的迴應。但是,如果處理數據時出現卷的差異,這些建議不會提供在作業運行期間動態更改它們的選項。 – Makubex

+0

我不認爲在地圖縮減作業開始後,您可以動態更改縮減器的數量。據我所知,在作業正在運行期間不會有任何提供值的人機交互。應該預先配置它。 Map Reduce作業是一個批處理過程(運行很長時間),所以用戶很難知道它何時會詢問用戶減速器的數量,並且在此過程中它不會被設計爲交互式的!希望你有答案! –

0

要設置動態減速器任務的數目:

地圖的數量通常是由DFS塊在輸入文件的數量驅動的。儘管這會導致人們調整自己的DFS塊大小來調整地圖的數量。

因此,在下面的代碼中,讓我們動態調整reducer任務的數量,以便在運行時調整map任務的數量。

在Java代碼:

long defaultBlockSize = 0; 
int NumOfReduce = 10; // you can set anything 
long inputFileLength = 0; 
try { 
    FileSystem fileSystem = FileSystem.get(this.getConf()); // hdfs file 
                  // system 
    inputFileLength = fileSystem.getContentSummary(
      new Path(PROP_HDFS_INPUT_LOCATION)).getLength();// input 
                  // file or 
                  // files 
                  // stored in 
                  // hdfs 

    defaultBlockSize = fileSystem.getDefaultBlockSize(new Path(
      hdfsFilePath.concat("PROP_HDFS_INPUT_LOCATION")));// getting 
                   // default 
                   // block 
                   // size 
    if (inputFileLength > 0 && defaultBlockSize > 0) { 
     NumOfReduce = (int) (((inputFileLength/defaultBlockSize) + 1) * 2);// calculating 
                       // no. 
                       // of 
                       // blocks 
    } 
    System.out.println("NumOfReduce : " + NumOfReduce); 
} catch (Exception e) { 
    LOGGER.error(" Exception{} ", e); 
} 

job.setNumReduceTasks(NumOfReduce); 
+0

這不是問題的答案 – dpolaczanski

2

沒有減速機能夠作業提交後未設置。 用這種方式思考 - 在映射器輸出上調用分區器,並且它需要知道分區的減速器數量。

相關問題