我正在处理Hadoop中的zip文件。每个zip文件包含2000个XML文件。单个映射器将花费 90到60分钟来完成该过程。我正在使用Windows和6核心机器,内存为12 GB。
我的问题是:我的进度条仅显示完成流程后的结果。进度状态为0%,直到完成任务,如下所示
如何以实际方式更改进度值?
我尝试了以下代码:
InputDocXmlCount++;
if (InputDocXmlCount % 100 == 0)
{
context.progress();
runningJob.mapProgress();
}
但我不知道怎么做?任何人都可以帮助我吗?
答案 0 :(得分:1)
MR框架代码无法决定如何显示百分比,因为(我假设)您正在使用某些特定的InputFormat。显然,框架不是那么聪明,可以为你计算zip中的xml文件数量,并预测你将每100条记录报告一次进度。
但是,看看MR计数器。您至少可以计算已处理的xml文件的数量
答案 1 :(得分:0)
您无法直接控制进度值,但可以考虑通过在映射器代码中调用TaskAttemptContext#setStatus来实现自定义状态消息。例如,您可以将此消息作为动态消息,包括处理的XML文件计数,并定期更新状态字符串中的计数。