【问题标题】:The TaskTracker spawns a new Mapper for each input split or for each key-value pair?TaskTracker 为每个输入拆分或每个键值对生成一个新的 Mapper?
【发布时间】:2015-07-08 07:17:42
【问题描述】:

我在某个网站上找到了以下问题,但我不确定正确答案。

MapReduce 程序中的哪个 Hadoop 服务会产生新的 Mapper?

  1. JobTracker 生成一个新的Mapper 来处理单个文件中的所有记录。
  2. TaskTracker 生成一个新的Mapper 来处理每个键值对。
  3. TaskTracker 产生一个新的Mapper 来处理单个输入拆分中的所有记录。
  4. JobTracker 调用TaskTrackerconfigure () 方法,然后调用它的map () 方法,最后调用它的close () 方法。

网站说答案是选项 2,但我对答案 3 感到困惑。

mapper 的 java 文档中,我发现了以下内容:

Hadoop Map-Reduce 框架为InputFormat 为作业生成的每个InputSplit 生成一个映射任务。 Mapper 实现可以通过 theJobContext.getConfiguration() 访问作业的配置。
框架首先调用setup(org.apache.hadoop.mapreduce.Mapper.Context),然后为InputSplit 中的每个键/值对调用map(Object, Object, Context)。最后cleanup(Context) 被调用。 与给定输出键关联的所有中间值随后由框架分组,并传递给Reducer 以确定最终输出。用户可以通过指定两个keyRawComparator类来控制排序和分组。

【问题讨论】:

  • 我实际上发现了不同问题的相同答案。问题是哪个过程描述了 Mapper 的生命周期?在这种情况下,答案是否仍然是选项 3?谢谢!
  • @Ashrith 你能看一下吗?

标签: hadoop


【解决方案1】:

是2

Map Task 是 JVM

Mapper 只是一个 java 类或一个对象

作业调度程序为每个拆分创建一个 Map 任务:(MapReduce1 第 191 页 Hadoop The Definitive Guide 3rd)。

Application Master 为每个 split 创建一个 map 任务对象:(MapReduce2 同一本书的第 199 页)。

无论哪种情况,taskTrack 都不会产生 Map 任务。

TaskTrack 生成 Mapper 类来处理每个键/值对。

【讨论】:

    【解决方案2】:

    答案是选项 3。Tasktrackers 生成执行映射器实例的 JVM。映射器总是处理整个输入分割。

    【讨论】:

      【解决方案3】:

      从 Definitve 指南中挑选,选项 3 是正确答案。以下是书上的内容

      YarnChild 在专用 JVM 中运行,原因与产生 tasktracker 的原因相同 MapReduce 1 中用于任务的新 JVM:

      【讨论】:

      • 你能看看我对原始问题的评论吗?谢谢。
      【解决方案4】:

      答案应该是2

      查看 Mapper 类代码:

       public class MaxTemperatureMapper
           extends Mapper<LongWritable, Text, Text, IntWritable> {
      

      表示Mapper类/对象每次都会取一个key/value对,当这个k/v对被处理完,类/对象就做完了,就结束了。下一个 k/v 对将由另一个 Mapper 处理,一个新的类/对象。

      【讨论】:

      • 我认为这可能不正确,因为在这种情况下覆盖 run 方法没有意义。
      【解决方案5】:

      这里需要考虑两个术语。

      • Mapper 与 Tasktracker 在单独的 JVM 处理输入拆分。 ( 所有的 )。对于 TextInputFormat ,这将是输入文件中的特定行数。
      • Map 方法,为拆分中的每个记录(键值对)调用。映射器.map(...) 。在 TextInputFormat 的情况下,每个 map 方法(调用)将处理输入拆分中的一行。

      在这种情况下,答案 3 似乎是最准确的答案。

      参考 :- The Definitive Guide Edition 3

      【讨论】:

        【解决方案6】:

        InputSplits 作为一个整体被提供给地图任务。

        拆分依次包含键值对。

        文件 -> 按此顺序拆分 -> 分区

        【讨论】:

          【解决方案7】:

          正确答案是选项 3

          2.TaskTracker 生成一个新的 Mapper 来处理每个键值对。

          3.TaskTracker 生成一个新的 Mapper 来处理单个输入拆分中的所有记录。

          对我来说,为每个键值对生成一个新的 Mapper 是没有意义的——想想 64MB 的块大小包含 1000 条记录(键值对)。我认为框架不会在这里创建 1000 个映射器。

          Mapper 任务处理单个输入拆分(不是文件或块或某些记录)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-09-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-28
            相关资源
            最近更新 更多