hadoop - JobHistoryServer中映射时间或减少时间的含义

标签 hadoop

我想知道下图中符号的确切含义。此图片来自 job history server web UI。我当然知道 Elapsed 的含义,但我不确定其他事情。我在哪里可以找到这些的明确定义?或者有谁知道那些的意思吗?

我想知道的分别是map时间、reduce时间、shuffle时间和merge时间。并且四个时间的总和应该与耗时非常相似(或相等)。但是“平均”关键字让我感到困惑。

Screenshot from Job history server

有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 分钟。这可能有几个原因。

  1. 您有 396 个 map task ,每个任务都生成中间数据。 shuffle 阶段必须将所有这些数据通过网络传递给 1 个 reducer,这会导致大量网络流量并因此增加传输时间。也许您可以通过增加 reducer 的数量来优化性能。

  2. 网络本身的带宽非常低,无法有效处理大量数据传输。在这种情况下,请考虑部署组合器,这将有效减少映射和减少阶段之间流经网络的数据量。

还有一些隐藏的执行成本,例如作业设置时间、作业跟踪器联系任务跟踪器和分配 map/reduce 任务所需的时间、从属节点向 JobTracker 发送心跳信号所花费的时间、NameNode 所花费的时间分配存储 block 和创建输入拆分等,这些都计入总运行时间。

希望这对您有所帮助。

关于hadoop - JobHistoryServer中映射时间或减少时间的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22953977/

相关文章:

hadoop - 客户端计算机上的mapred-site.xml必须与hadoop集群中的mapred-site.xml相同吗?

scala - 如何为每个分区具有相同数量元素的大小相同的分区的 Spark RDD 定义自定义分区程序?

linux - 无法使用 hdfs dfs 命令复制 hdfs 中的数据

hadoop - Hadoop Pig Latin始终无法加载数据

java - Hadoop Java 错误 : Exception in thread "main" java. lang.ClassNotFoundException : com. packt.ch3.etl.ParseWeblogs

hadoop - 如何使用 Snappy 压缩将文件放入 HDFS

hadoop - 为什么增加集群数量可以加快 Hadoop MapReduce 中的查询速度?

python - python 3.4.3 上的 pydoop 安装

hadoop - 在EMR Job中使用AWS Java SDK

java - MultipleOutputFormat 支持 'Job'