Mapper在Hadoop中进行运行任务的进度

时间:2014-01-23 13:41:39

标签: java hadoop mapreduce

我正在处理Hadoop中的zip文件。每个zip文件包含2000个XML文件。单个映射器将花费 90到60分钟来完成该过程。我正在使用Windows和6核心机器,内存为12 GB。

我的问题是:我的进度条仅显示完成流程后的结果。进度状态为0%,直到完成任务,如下所示

enter image description here

如何以实际方式更改进度值?

我尝试了以下代码:

InputDocXmlCount++;
if (InputDocXmlCount % 100 == 0)
{
    context.progress();
    runningJob.mapProgress();
}

但我不知道怎么做?任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

MR框架代码无法决定如何显示百分比,因为(我假设)您正在使用某些特定的InputFormat。显然,框架不是那么聪明,可以为你计算zip中的xml文件数量,并预测你将每100条记录报告一次进度。

但是,看看MR计数器。您至少可以计算已处理的xml文件的数量

答案 1 :(得分:0)

您无法直接控制进度值,但可以考虑通过在映射器代码中调用TaskAttemptContext#setStatus来实现自定义状态消息。例如,您可以将此消息作为动态消息,包括处理的XML文件计数,并定期更新状态字符串中的计数。