一个Hadoop作业中的CPU时间是什么意思?

7

很抱歉,我不太理解Map-Reduce作业的计时结果。例如,我正在运行的一个作业在作业跟踪器中给出以下结果:

完成时间:1分39秒

CPU时间消耗(毫秒)150,460 152,030 302,490

CPU时间消耗(毫秒)中的条目分别为Map、Reduce和总体。但是,“CPU时间消耗”是如何衡量的?它表示什么意思?这是分配给作业的每个Mapper和Reducer中累计花费的总时间吗?是否可以从框架中测量其他时间,例如shuffle、sort、partition等的时间?如果可以,如何测量?

第二个困扰我的问题。我看到这里的一些帖子(链接1链接2),建议在驱动程序类中使用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输出中第一个条目提供的吗?这个是否必要?当我想计算IO时间、每个节点/每个阶段的计算时间时,最好的计时Hadoop作业的方式是什么?


你应该在不同的帖子中提出不同的问题。 - Donald Miner
1个回答

18

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

归约阶段包括:洗牌、排序、归约和输出。

你在那里看到的 CPU 时间是整个映射阶段和归约阶段的时间...而不仅仅是函数本身。这种术语有点令人困惑,因为你有映射函数和归约函数,它们只是映射阶段和归约阶段的一部分。这是集群中所有节点的总CPU时间。

CPU时间与实际时间相差很大。 CPU时间是某些东西在CPU上所花费的时间,而实际时间则是我们作为人类所经历的时间。想想这个问题:假设您在一个20个节点的集群上运行相同的作业并处理相同的数据,然后在一个200个节点的集群上运行。总体而言,两个集群将使用相同数量的CPU时间,但是200个节点的集群将以实际时间快10倍的速度运行。当您有许多作业同时在共享系统上运行时,CPU时间是一种有用的指标。

我不知道如何深入了解每个阶段的CPU时间。使用日期计时器可能不是您要寻找的东西。


@donaldminer CPU时间确实与我们体验的时间不同,特别是如果考虑节点数。但是,CPU时间可以更好地了解能源消耗情况。据我所知,CPU时间包括所有Mapper和Reducer的部分。 - Jonny5
在我的分布式模式中,我看到 --> MapReduce 总累计 CPU 时间:20 分钟 38 秒 680 毫秒和总 MapReduce CPU 时间花费:20 分钟 25 秒 980 毫秒,但实际上如果我看实际时间,只需要 --> 实际用时:47.769 秒。这是否意味着如果我们尝试在单节点集群中运行相同的作业,那么需要 20 分钟等等?请建议是否正确!! - Indrajeet Gour
1
@Donald Miner,您能否向我解释一下,在20个节点和200个节点的集群上,相同的作业和数据将需要相同的CPU时间? - Dhruv Kapatel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接