Map阶段和Reduce阶段进度如何计算
How is Map stage and Reduce stage progress calculated
我想知道在 Hadoop MapReduce 中当一个作业 运行 时,map-stage 和 reduce stage-progress 是如何计算的。
我进入 JobClient.java 寻找线索,我认为 JobStatus.java 存储了所有这些信息,但我找不到百分比 calculated/updated。
寻找这个文件
检查功能 ,它显示 % 状态。您需要检查 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)));
}
基本上,它是所有任务的平均进度。
我想知道在 Hadoop MapReduce 中当一个作业 运行 时,map-stage 和 reduce stage-progress 是如何计算的。
我进入 JobClient.java 寻找线索,我认为 JobStatus.java 存储了所有这些信息,但我找不到百分比 calculated/updated。
寻找这个文件
检查功能 ,它显示 % 状态。您需要检查 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)));
}
基本上,它是所有任务的平均进度。