如何计算Map阶段和Reduce阶段进度

时间:2015-03-25 02:47:10

标签: java hadoop mapreduce

我想知道在Hadoop MapReduce中运行作业时如何计算map-stage和reduce stage-progress。

enter image description here

我进入JobClient.java搜索线索,我认为JobStatus.java存储了所有这些信息,但我无法找到如何计算/更新百分比。

2 个答案:

答案 0 :(得分:1)

来自org.apache.hadoop.mapred.JobInProgress#updateTaskStatus

 double progressDelta = tip.getProgress() - oldProgress;
 if (tip.isMapTask()) {
    this.status.setMapProgress((float) (this.status.mapProgress() + 
                                progressDelta / maps.length));
 } else {
  this.status.setReduceProgress((float) (this.status.reduceProgress() + 
                              (progressDelta / reduces.length)));
 }

基本上,它是所有任务的平均进度。

答案 1 :(得分:0)

查找此文件

https://github.com/shot/hadoop-source-reading/blob/master/src/mapred/org/apache/hadoop/mapred/JobClient.java

检查功能,显示%状态。你需要检查mapProgress和reduceProgress

  public boolean monitorAndPrintJob
  .....
  while (!job.isComplete()) {
        Thread.sleep(1000);
        String report = (" map "
                + StringUtils.formatPercent(job.mapProgress(), 0)
                + " reduce " + StringUtils.formatPercent(job
                .reduceProgress(), 0));
        if (!report.equals(lastReport)) {
            LOG.info(report);
            lastReport = report;
        }

然后你需要从中查找updateTaskStatus方法 的 org.apache.hadoop.mapred.JobInProgress