【问题标题】:What does CPU Time for a Hadoop Job signify?Hadoop 作业的 CPU 时间意味着什么?
【发布时间】:2012-07-30 17:20:13
【问题描述】:

恐怕我不明白 Map-Reduce 作业的计时结果。例如,我正在运行的一项工作为我提供了来自工作跟踪器的以下结果。

完成时间:1 分 39 秒

花费的 CPU 时间(毫秒)150,460 152,030 302,490

CPU 时间(毫秒)中的条目分别用于 Map、Reduce 和 Total。但是,那么如何衡量“花费的 CPU 时间”以及它意味着什么?这是分配给作业的每个映射器和缩减器所花费的总累积时间吗?是否可以从框架中测量其他时间,例如随机播放、排序、分区等时间?如果有,怎么做?

困扰我的第二个问题。我在这里看到了一些帖子(Link1Link2)建议在驱动程序类中使用 getTime() :

long start = new Date().getTime();
boolean status = job.waitForCompletion(true);
long end = new Date().getTime();
System.out.println("Job took "+(end-start) + "milliseconds");

这不是在做 Job Tracker 输出中的第一个条目提供的吗?这是必要的吗?为 hadoop 作业计时的最佳方法是什么,尤其是当我想计时 IO 时间、计算每个节点/每个阶段的时间时?

【问题讨论】:

  • 你应该在不同的帖子中提出不同的问题

标签: hadoop timing benchmarking


【解决方案1】:

映射阶段包括:记录读取器、映射、组合器和分区器。

reduce 阶段包括:shuffle、sort、reduce、output。

您看到的 CPU 时间包括整个 map 阶段和整个 reduce 阶段......不仅仅是函数本身。这是一种令人困惑的术语,因为您有 map 函数和 reduce 函数,它们只是 map phase 和 reduce phase 的一部分。这是集群中所有节点的总 CPU 时间。

CPU 时间与实时有很大不同。 CPU时间是在CPU上花费的时间,而实时是你我作为人类所经历的。想一想:假设您有相同的作业在相同的数据上运行,但在一个 20 节点集群上,然后是 200 节点集群。总体而言,两个集群将使用相同数量的 CPU 时间,但 200 节点集群的实时运行速度将提高 10 倍。当您有一个共享系统同时在其上运行大量作业时,CPU 时间是一个有用的指标。​​

我不知道您将如何深入研究以获取每个阶段的 CPU 时间。不过,使用日期计时器可能不是您想要的。

【讨论】:

  • 谢谢。这非常有用。
  • @donaldminer CPU 时间确实与我们体验的时间不一样,尤其是考虑到节点数量时。但是,CPU 时间可以让您更深入地了解能耗。据我了解,CPU 时间包括映射器和化简器的所有部分。
  • 在我见过的分布式模式下 --> MapReduce 总累积 CPU 时间:20 分 38 秒 680 毫秒和总 MapReduce CPU 时间:20 分 25 秒 980 毫秒,但实际上如果我看到实际时间只是 --> 所用时间:现实世界中的 47.769 秒。这是否意味着如果我们使用相同的作业尝试运行需要 20 分钟和 soo 的单节点集群.. ??请建议是否正确!
  • @Donald Miner 你能解释一下在 20 节点和 200 节点集群上使用相同数据的相同作业如何花费相同的 cpu 时间吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
相关资源
最近更新 更多