控制MultipleOutputFormat文件子路径

时间:2012-06-28 03:44:22

标签: hadoop

我需要根据reducer键控制由MultipleOutputFormat管理的不同不同文件的子路径。

我基本上想根据赋予reducer的密钥设置文件的子路径。

我可以通过覆盖MultipleOutputFormat的generateFileNameForKeyValue方法来更改文件名,但是如何更改这些文件的子路径呢?

我的意思是只要覆盖generateFileNameForKeyValue,我得到

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

但我想让它组织如下文件

 mySetJobConfigOutputPath/path0ConfiguredInsideReducerBasedOnKey/fileNameBasedKey1.dat

                         /path1ConfiguredInsideReducerBasedOnKey/fileNameBasedKey2.dat
                                                                /fileNameBasedKey3.dat

                         /path2ConfiguredInsideReducerBasedOnKey/fileNameBasedKey8.dat
如图所示,子路径和文件名都由reducer内的键计算出来。

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

1 个答案:

答案 0 :(得分: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 ,将您的潜在客户文件名转换为密钥

更新:基本上这解释了所有http://www.infoq.com/articles/HadoopOutputFormat