在运行map-reduce作业时,只有mapper,我有一个计数器来计算失败文档的数量。在完成所有映射器之后,如果失败文档的总数是,则我希望作业失败高于固定分数。 (我最终需要它,因为我最初不知道文件的总数)。如果不为此实现简化,我怎样才能实现这一目标?
我知道有任务级别的清理方法。但是有没有任何工作级别的清理方法,可以用来在完成所有任务后执行此操作?
答案 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);
}
您可以拥有记录器,甚至可以记录此处所需的正确消息..
我希望这能解决你的问题。如果您需要更多帮助,请告诉我。