【问题标题】:What is the exact Map Reduce WorkFlow?什么是 Map Reduce 工作流?
【发布时间】:2017-06-27 04:58:20
【问题描述】:

《hadoop权威指南-tom white》一书的总结是:

用户的map函数和用户的reduce函数之间的所有逻辑都称为shuffle。然后 Shuffle 跨越 map 和 reduce。在用户的 map() 函数之后,输出在内存循环缓冲区中。当缓冲区满 80% 时,后台线程开始运行。后台线程会将缓冲区的内容输出到溢出文件中。此溢出文件按键分区。并且在每个分区内,键值对是按key排序的。排序后,如果启用了combiner函数,则调用combiner函数。所有溢出文件将合并到一个 MapOutputFile。并且所有 Map 任务的 MapOutputFile 将通过网络收集到 Reduce 任务。减少任务将做另一种排序。然后调用用户的Reduce函数。

所以问题是:

1.) 根据上面的总结,流程是这样的:

Mapper--Partioner--Sort--Combiner--Shuffle--Sort--Reducer--输出

1a.) 这是流程还是其他?

1b.) 你能用一个例子解释一下上面的流程吗,比如字数例子,(我在网上找到的不是那么详细)?

2.) 所以映射器阶段输出是一个大文件(MapOutputFile)?正是这个大文件被分解,键值对被传递到各自的reducer上?

3.) 当数据在传递到各自的 reducer 时已经排序和组合时,为什么还要进行第二次排序?

4.) 如果 mapper1 在 Datanode1 上运行,那么 reducer1 是否需要在 datanode1 上运行?或者它可以在任何 Datanode 上运行?

【问题讨论】:

    标签: hadoop mapreduce combiners bigdata


    【解决方案1】:

    回答这个问题就像改写整个历史。您的很多疑问都与操作系统概念有关,而不是 MapReduce。

    1. Mappers 数据写入本地文件系统。数据根据reducer的数量进行分区。并且在每个分区中,根据溢出发生的次数,可以有多个文件。
    2. 对给定分区中的每个小文件进行排序,就像在写入文件之前一样,在内存中进行排序。
    3. 为什么需要在映射器端对数据进行排序? a.在mapper端对数据进行排序合并,减少文件数量。 b.文件被排序,因为在reducer上收集给定键的所有值是不可能的。
    4. 在 reducer 上收集数据后,首先需要减少系统上的文件数量(记住 uLimit 对每个用户都有固定数量,在这种情况下 hdfs)
    5. Reducer 仅在一小部分已排序文件上维护一个文件指针,并对它们进行合并。

    要了解更多有趣的想法,请参考: http://bytepadding.com/big-data/map-reduce/understanding-map-reduce-the-missing-guide/

    【讨论】:

      猜你喜欢
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多