我需要根据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文件夹下配置每个文件的子路径?
答案 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