- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想知道下图中符号的确切含义。此图片来自 job history server
web UI。我当然知道 Elapsed 的含义,但我不确定其他事情。我在哪里可以找到这些的明确定义?或者有谁知道那些的意思吗?
我想知道的分别是map时间、reduce时间、shuffle时间和merge时间。并且四个时间的总和应该与耗时非常相似(或相等)。但是“平均”关键字让我感到困惑。
有396个map,1个reduce。
最佳答案
您可能已经知道,MapReduce 作业分为三个阶段:
Map 是第 1 阶段,其中每个 Map 任务都提供一个输入拆分,这是总输入数据的一小部分。 Map 任务处理来自输入拆分和输出中间数据的数据,这些中间数据需要转到 reducer。
Shuffle 阶段是下一步,其中由 Map 任务生成的中间数据被定向到正确的 reducer。 Reducers 通常处理 Map 任务生成的键总数的一个子集。 Shuffle 阶段将键分配给缩减器,并将与键相关的所有值发送到分配的缩减器。排序(或合并)也是这个阶段的一部分,其中给定键的值被排序并发送到 reducer。正如您可能意识到的那样,shuffle 阶段涉及从 Map -> Reduce 任务通过网络传输数据。
Reduce 是 MapReduce 作业的最后一步。 Reduce 任务处理与键相关的所有值并将其结果输出到所需位置 (HDFS/Hive/Hbase)。
现在谈到平均时间,您说有 396 个 map task 。每个 Map 任务本质上都在做完全相同的处理工作,但处理的是不同的数据 block 。所以 Average Map time 基本上是所有 396 个 map 任务完成所用时间的平均值。
平均 Map 时间 = 所有 Map 任务花费的总时间/Map 任务数
同样,
平均 Reduce 时间 = 所有 Reduce 任务花费的总时间/Reduce 任务数
现在,为什么平均时间很重要?这是因为,大多数(如果不是所有的话)您的 map task 和 reduce task 将并行运行(取决于您的集群容量/每个节点的槽数等)。因此,计算所有 map 任务和 reduce 任务的平均时间将使您很好地了解整个 Map 或 Reduce 阶段的完成时间。
从您的屏幕截图中观察到的另一个结果是,您的 Shuffle 阶段耗时 40 分钟。这可能有几个原因。
您有 396 个 map task ,每个任务都生成中间数据。 shuffle 阶段必须将所有这些数据通过网络传递给 1 个 reducer,这会导致大量网络流量并因此增加传输时间。也许您可以通过增加 reducer 的数量来优化性能。
网络本身的带宽非常低,无法有效处理大量数据传输。在这种情况下,请考虑部署组合器,这将有效减少映射和减少阶段之间流经网络的数据量。
还有一些隐藏的执行成本,例如作业设置时间、作业跟踪器联系任务跟踪器和分配 map/reduce 任务所需的时间、从属节点向 JobTracker 发送心跳信号所花费的时间、NameNode 所花费的时间分配存储 block 和创建输入拆分等,这些都计入总运行时间。
希望这对您有所帮助。
关于hadoop - JobHistoryServer中映射时间或减少时间的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22953977/
我是一名优秀的程序员,十分优秀!