如何在mapreduce作业后安排后处理任务

时间:2014-02-12 14:15:13

标签: hadoop mapreduce

我正在寻找一种简单的方法来在地图缩减作业后链接后处理代码

具体来说,涉及重命名\移动文件由org.apache.hadoop.mapred.lib.MultipleOutputs创建(该类对输出文件名有限制,所以我不能直接在mapreduce作业中生成文件)

我知道(或想到)的选项是:

  • 将它添加到作业创建代码中 - 这就是我现在所做的,但我更喜欢任务将由jobtracker安排(以减少进程被中止的机会)
  • 使用工作流引擎(luigi,oozie) - 但这似乎对此问题有点过分
  • 使用作业链 - 这允许链接mapreduce作业 - 它可以链接一个“简单”的任务吗?

1 个答案:

答案 0 :(得分:1)

你的简单"任务应该是一个Mapper专用的工作。您的Map()接收文件名作为键并重命名该文件。为此,您必须编写自己的InputFormat和RecordReader,就像在链接中一样,但是RecordReader实际上不应该读取文件,只需在getCurrentKey()中返回文件名:

https://code.google.com/p/hadoop-course/source/browse/HadoopSamples/src/main/java/mr/wholeFile/WholeFileInputFormat.java?r=3

https://code.google.com/p/hadoop-course/source/browse/HadoopSamples/src/main/java/mr/wholeFile/WholeFileRecordReader.java?r=3