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

How is Map stage and Reduce stage progress calculated

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

我进入 JobClient.java 寻找线索,我认为 JobStatus.java 存储了所有这些信息,但我找不到百分比 calculated/updated。

寻找这个文件

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

来自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)));
 }

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