使用MultipleTextOutputFormat控制MapReduce中的输出文件名

时间:2011-08-05 18:22:56

标签: java hadoop mapreduce hadoop-plugins

Hadoop(和Java)在这里新手。我需要一些帮助,使用MultipleTextOutputFormat来控制MapReduce中的输出文件名。

目前我正在使用它this way。它似乎工作正常。然而,我想要改变的是使用选择的字段来确定文件名。

而不是将它们硬编码到field[0]field[3](如示例中的情况),我想从JobConf中选择(以某种动态方式)为field[jobConf.get("id.offset")]field[jobConf[get("date.offset")]。这里有没有人知道如何做到这一点(或者这样做的东西,即它本身不一定是JobConf)?

任何指针/建议/提示等。非常感谢。感谢。

2 个答案:

答案 0 :(得分:2)

这取决于您的自定义参数是根据作业还是键/值对而不同。

如果覆盖getRecordWriter()方法,则可以获取JobConf对象。这是调用generateFileNameForKeyValue()的方法(在Hadoop源代码中查看MultipleOutputFormat类中的实现)。您可以调用super,然后使用您在JobConf对象中传递的参数执行任何操作。

如果您的参数因不同的键/值对而不同,您可以将参数作为键或值的一部分发送。然后覆盖MultipleTextOutputFormat类中的getActualKey()或getActualValue()以获取所需的实际键或值对象。

希望这有帮助。

答案 1 :(得分:0)

您可以向conf对象添加设置。

Configuration conf = new Configuration();
conf.set("id.offset", 0);
conf.set("date.offset", 3);
...   
JobConf jobConf = new JobConf(conf, MyJob.class);

在你的fileName函数中,你可以按照你的意愿使用它; field[jobConf.get("id.offset")]field[jobConf[get("date.offset")]

这里有一个小注:我没有使用JobConf,所以我实际上并不知道如何将设置拉出来。我使用Job,map函数有context对象,我将其用作context.getConfiguration()来获取Configuration对象conf,并将数据作为int idOffset = conf.get("id.offset");

HTH

相关问题