如何在Hadoop中找到映射器和缩减器所花费的时间?

HHH*_*HHH 4 java hadoop mapreduce

如何在Hadoop中找到每个映射器和缩减器花费的时间以及在代码(不在Web界面中)中进行洗牌(排序)的时间?所有映射器(或缩减器)的总时间如何?

Cha*_*guy 6

没有为一个API JobTracker描述在这里,让你一堆集群本身以及细节的所有作业的信息.

特别是,如果您知道作业ID并且想要查找每个单独地图的指标并减少任务,您可以调用getMapTaskReports哪个将返回此处TaskReport详述的实例,这样您就可以访问诸如或之类的方法.例如:getFinishTimegetStartTime

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);
}
Run Code Online (Sandbox Code Playgroud)

要计算作业中所有映射器或缩减器的总时间,您可以在代码中简单地总结它们.

关于改组,这通常在作业跟踪器中计算为每个减少任务的33%,这并不一定意味着它占33%的时间但我不认为有一种自动化的方式来获得每个任务的洗牌时间,所以你可以使用这个简单的启发式33%.

请注意尽管通过使用如上所示的jobtracker API中的时间测量,减速器中的时间可能有点偏差,因为当减少任务开始时它基本上进行了改组(如解释的那样高达33%),然后它等待所有地图任务完成,然后才开始实际减少,因此减少测量实际上是这3个周期的总和(shuffle + wait + reduce).