1

我需要根据 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

正如所见,子路径和文件名都是由减速器内部的键计算出来的。

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

4

1 回答 1

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

于 2012-06-29T03:04:21.593 回答