问题:
我们知道一个任务跑完后,会在jobhistory里面现在如下界面:
1)那这里面的elapsed、Average Map Time、Average Reduce Time、Average Shuffle Time、Average Merge Time时间是什么意思?
2)为什么elapsed时间不等于任务总时间:Finished-Submitted=33s
解释:
这里会涉及到yarn client任务提交的过程,时间应该是从客户端与rm交互的时候开始算的,到任务结束后截止
yarn client提交过程可以参考:我的yarn client提交任务过程
hadoop任务一般可以分为以下几个步骤
1)map阶段,map阶段包括input、split、partition、sort、combiner、merge
2)shuffle阶段,shuffle阶段包括copy、merge
3)reduce阶段,reduce阶段包括Reducer,最终输出文件到hdfs
Average Map Time = Total time taken by all Map tasks/ Number of Map Tasks
Average Reduce Time = Total time taken by all Reduce tasks/Number of Reduce tasks
Average Shuffle Time = copy from map result and merge map result
当然还有一些隐藏的时间:
例如作业设置时间、作业跟踪器联系任务跟踪器和分配映射/减少任务所需的时间、从节点向作业跟踪器发送心跳信号所需的时间、名称节点分配存储块和创建输入拆分所需的时间等。
所有这些都计入总运行时间。
最终任务消耗时间应该是:elapsed + hidden time = finish time - submittime
还有一个问题?
我们在hive里面运行mr任务的时候会提示Time take,这时间会比上面任务最终消耗的时间还大呢?
原因是:
任务在submit前,还有client与rm交互、client上传文件、以及client等待rm启动am的时间,所以我们在hive命令行中看到的Time take时间会比jobhistory中任务消耗的时间要大的原因。