如何在Hadoop中找到每个映射器和缩减器花费的时间以及在代码(不在Web界面中)中进行洗牌(排序)的时间?所有映射器(或缩减器?)的总时间如何?
答案 0 :(得分:6)
JobTracker
有一个API,如here所述,它为您提供了有关群集本身的一系列信息以及所有工作的详细信息。
特别是,如果您知道作业ID,并且想要查找每个地图的指标并减少任务,则可以致电getMapTaskReports
,这将返回详细TaskReport
实例here这使您可以访问getFinishTime
或getStartTime
等方法。例如:
TaskReport[] maps = jobtracker.getMapTaskReports("your_job_id");
for (TaskReport rpt : maps) {
long duration = rpt.getFinishTime() - rpt.getStartTime();
System.out.println("Mapper duration: " + duration);
}
TaskReport[] reduces = jobtracker.getReduceTaskReports("your_job_id");
for (TaskReport rpt : reduces) {
long duration = rpt.getFinishTime() - rpt.getStartTime();
System.out.println("Reducer duration: " + duration);
}
要计算作业中所有地图制作者或缩减者的总时间,您只需在代码中对它们进行总结即可。
关于改组,这通常被记录在每个减少任务的33%,这并不一定意味着33%的时间,但我认为没有一种自动化方式来获得每次减少任务任务,所以你可以使用这个简单的启发式33%。
请注意尽管通过使用如上所示的jobtracker API中的时间测量值,减速器中的时间可能有点偏差,因为当减少任务开始时它基本上会进行改组(如解释的那样高达33%) ,然后等待直到所有地图任务完成,然后才开始实际减少,因此减少测量实际上是这3个时期的总和(随机+等待+减少)。