2012-06-28 65 views
1

我需要根據reducer鍵控制由MultipleOutputFormat管理的不同不同文件的子路徑。控制MultipleOutputFormat文件的子路徑

我基本上想根據給予reducer的關鍵字設置文件的子路徑。

我可以通過覆蓋MultipleOutputFormatbut的generateFileNameForKeyValue方法來更改文件名,還可以如何更改這些文件的子路徑?

我指的只是重寫generateFileNameForKeyValue,我得到

mySetJobConfigOutputPath/fileNameBasedKey1.dat 
         /fileNameBasedKey2.dat 
         /fileNameBasedKey3.dat 
         ... 

,但我想讓它來組織文件,如下面

mySetJobConfigOutputPath/path0ConfiguredInsideReducerBasedOnKey/fileNameBasedKey1.dat 

         /path1ConfiguredInsideReducerBasedOnKey/fileNameBasedKey2.dat 
                   /fileNameBasedKey3.dat 

         /path2ConfiguredInsideReducerBasedOnKey/fileNameBasedKey8.dat 

所見,子路徑和文件名字都是通過減速器內部的鑰匙計算出來的。

我知道如何配置文件名,但想知道我是否可以在mySetJobConfigOutputPath文件夾下配置每個文件的子路徑?

+0

試試這個 HTTP:/ /stackoverflow.com/questions/6272307/how-do-i-use-the-multipletextoutputformat-using-the-new-hadoop-api#26756067 –

回答

0

我發現我可以重寫getInputFileBasedOutputFileName方法還上,並在那裏的子路徑。

@Override 
protected String getInputFileBasedOutputFileName(JobConf conf, String Name) 
{ 
    //your logic goes here. Simply addd the sub path to the name and return  
} 

您應該仍然實現generateFileNameForKeyValue至潛在的文件名轉換爲關鍵

UPDATE:基本上,這可以解釋這一切http://www.infoq.com/articles/HadoopOutputFormat