我有一个运行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中,也与群集中的所有节点相关联。
答案 0 :(得分:1)
在Job
课程中,有一种名为#getTaskReports
的方法。
您可以使用它来检索地图任务持续时间:
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!");
}