【问题标题】:Sorting in MapReduce HadoopMapReduce Hadoop 中的排序
【发布时间】:2015-10-05 11:38:22
【问题描述】:

我有几个关于 Hadoop MapReduce 的基本问题。

  1. 假设如果执行了 100 个映射器并且零减速器。会吗 生成100个文件?所有个体都排序?跨越所有映射器 输出是否排序?
  2. reducer 的输入是键 -> 值。对于每个键,所有值都已排序?
  3. 假设如果执行了 50 个 reducer。它会生成50个文件吗?所有单个文件都已排序?是否对所有 reducer 输出进行了排序?

在 MapReduce 中是否有保证排序发生的地方?

【问题讨论】:

    标签: hadoop mapreduce cloudera mapr


    【解决方案1】:

    1.假设如果执行了 100 个映射器并且零减速器。它会生成100个文件吗?

    是的。

    所有个人都排序了吗?

    没有。如果没有使用 reducer,那么 mapper 的输出不会被排序。只有在减少阶段时才会进行排序。

    所有映射器的输出都排序了吗?

    不,原因同上。

    2.reducer 的输入是 Key -> Values。对于每个键,所有值都排序?

    没有。但是,键是排序的。在reducer 获取mapper 的输出的shuffle 阶段之后,它对mapper 的排序输出键进行合并排序(因为存在reduce 阶段),当它开始reducer 时,对键进行排序。

    3.假设是否执行了 50 个 reducer。它会生成50个文件吗?

    是的。 (除非你使用MultipleOutputs

    所有单个文件都已排序?

    没有。排序后的输入不保证排序后的输出。输出取决于您在 reduce 方法中使用的算法。

    所有reducer的输出都排序了吗?

    不,原因同上。但是,如果您使用 Identity Reducer,即您只是在得到它时写入 reducer 的输入,则 reducer 的输出将按 PER REDUCER 排序,而不是全局排序。

    在 MapReduce 中是否有保证排序发生的地方?

    当有一个 reduce 阶段时进行排序,并且它应用于每个 mapper 的输出键和每个 reducer 的输入键。如果要对reducer的输入进行全局排序,既可以使用单个reducer,也可以使用TotalOrderPartitioner,这有点棘手……

    【讨论】:

    • 看起来这个没有发生。 “reducer 的输入是 Key -> Values。对于每个键,所有值都已排序?”。对于一个键,所有值都没有排序。
    • 我的错!排序是在键上,而不是在值上。我现在会修复它。对不起!
    • @vefthym 根据您的回答,如果我们只使用一个减速器,我们将获得全局排序的数据?这意味着我们在输出中得到了某种键?
    • @SaeedRahmani 正确,如果您只打印单个 reducer 的输入对(即,如果您使用单个 IdentityReducer),那么键将被全局排序。
    • @vefthym stackoverflow.com/questions/40641984/…,这是我的问题,我使用单个减速器,但输出不是全局排序的。为什么?
    猜你喜欢
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多