这是一个非常初学者的问题,但我无法找到答案。mapreduce程序实际花费的时间是多少?
它是"完成"的时间显示在下面的第一个链接。第二个链接显示的CPU时间是多少?正如您所看到的,所花费的CPU时间远远少于"完成"时间,因此可以将该时间作为代码的总运行时间。CPU时间,"完成"时间和mapreduce程序实际花费的时间之间是否存在关联?
第一个快照第二个快照
完成时间是程序从启动进程到最终返回所花费的时间。在此期间,进程不需要消耗任何CPU周期。进程调度器可以在进程调度器之间切换以执行其他任务,而您的程序可能处于空闲状态(等待某些信号/标志,或者它只是完成了分配给它的cpu时间片段)。
所以,cpu时间+ Idle-time = Finish-time。(几乎)
在驱动程序类中,除了运行mapreduce作业外,还运行许多其他代码。您实际上应该关注的是,mapreduce作业处理您设置它运行的数据所花费的时间。因此,如果您希望估计一定数量的数据所花费的时间(这取决于处理能力- ResourceManager
可用的虚拟核和内存-也由ResourceManager
管理),您应该查看第二张图中给出的纱线统计数据。同样,对于固定的数据大小,您的mapreduce作业并不总是具有相同的完成时间(如图1所示),它将根据资源的可用性而变化。更少的资源意味着更多的空闲时间。但是对于给定的固定数据量,image-2中的统计数据(cpu时间)应该保持不变。
mapper和reducer的总和是CPU总时间。它们是相等的。cpu时间是mapreduce应用程序运行所花费的时间。mapreduce应用程序由- Mapper和Reducer组成。反过来,Mapper有一些任务,比如读取输入文件(包含记录),并通过map函数循环每个记录。然后它有合并器和分割器。然后,该数据进入reduce阶段,在此阶段,每个分区(根据映射输出键值进行分区)通过reduce函数循环。reduce函数返回最终输出。在此之前,reduce还会进行洗牌和排序。因此,您看到的cpu时间是针对上述整个进程的。