我有一个在其上运行YARN的集群。它具有3个数据节点和1个客户端节点。我在客户端节点上提交了所有作业。如何获得特定作业中所有任务的经过时间。

RESTful API(https://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-site/MapredAppMasterRest.html)可以用于此目的。但是我很想知道是否有任何Java API可以做到这一点。

我可以使用TaskReport类的getStartTime()方法找到所有任务的开始时间。尽管群集中的节点已使用NTP同步了时间,但我认为使用客户端系统的当前时间(System.currentTimeMillis())来计算“正在运行”任务的经过时间不是一个好习惯,但是可以接受一些与群集中所有节点相关的延迟,即使在NTP中也是如此。

最佳答案

Job类中,有一种称为#getTaskReports的方法。

您可以通过这种方式来检索 map task 的持续时间:

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!");
}

关于java - Hadoop任务耗时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31499750/

10-11 12:25