java—hadoop任务的运行时间

pcww981p  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(513)

我有一团毛线在上面。它有3个数据节点和1个客户机节点。我在客户机节点上提交所有作业。如何获取特定作业中所有任务的运行时间。
可能是restful api(https://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-site/mapredappmasterrest.html)可用于此目的。但我很想知道是否有JavaAPI可以做到这一点。
我可以使用taskreport类的getstarttime()方法找到所有任务的开始时间。尽管集群中的节点使用ntp进行时间同步,但我认为使用客户机系统当前时间(system.currenttimemillis())来计算正在运行的任务的运行时间并不是一个好的做法,即使在ntp中,集群中的所有节点也可能存在一些可接受的延迟。

x9ybnkn6

x9ybnkn61#

Job 类有一个名为 #getTaskReports .
您可以这样使用它来检索Map任务持续时间:

Job job = ...;
job.waitForCompletion(); 

TaskReport[] reports = job.getTaskReports(TaskType.MAP);
for(TaskReport report : reports) { 
   long time = report.getFinishTime() - report.getStartTime();
   System.out.println(report.getTaskId() + " took " + time + " millis!");
}

相关问题