完成所有地图任务后的作业范围自定义清理

时间:2013-05-24 03:53:00

标签: hadoop mapreduce

在运行map-reduce作业时,只有mapper,我有一个计数器来计算失败文档的数量。在完成所有映射器之后,如果失败文档的总数是,则我希望作业失败高于固定分数。 (我最终需要它,因为我最初不知道文件的总数)。如果不为此实现简化,我怎样才能实现这一目标?

我知道有任务级别的清理方法。但是有没有任何工作级别的清理方法,可以用来在完成所有任务后执行此操作?

1 个答案:

答案 0 :(得分:0)

这可以很容易地完成。这是最新mapreduce API的美妙。

映射器的执行可以通过覆盖Mapper类中的run方法来控制,对于reducer也是如此。我不知道你期待的最终结果。但是,我为你准备了一个小例子。我有

在我的mapper类中,我有覆盖run方法并给你一个样本,如果我的代码中的键值大于200,它会破坏执行。

public class ReversingMapper extends Mapper<LongWritable, Text, ReverseIntWritable, Text> 
{
    public final LongWritable border = new LongWritable(100);
    @Override
      public void run(Context context) throws IOException, InterruptedException {
        setup(context);

          while (context.nextKeyValue()) {

             /*   extra code to standard run method started here                 */

            //if(context.getCounter(<ENUM>) > 200 ){}  -- you can place your counter check here.
            if(context.getCurrentKey().get() > 200 )
            {
                throw new InterruptedException();
            }else
            {
            /*   extra code to standard run method ended here                 */
                map(context.getCurrentKey(), context.getCurrentValue(), context);
            }
          }

      }

你需要在驱动程序中正确处理。

} catch (InterruptedException e) {
            e.printStackTrace();
            System.exit(0);
        }

您可以拥有记录器,甚至可以记录此处所需的正确消息..

我希望这能解决你的问题。如果您需要更多帮助,请告诉我。