gpt4 book ai didi

hadoop - 使用零 Reducers 时,我能否从 Hadoop 获得单独排序的 Mapper 输出?

转载 作者:可可西里 更新时间:2023-11-01 14:19:15 26 4
gpt4 key购买 nike

我在 Hadoop 0.20 中有一份工作需要一次处理一个大文件。 (这是一个预处理步骤,可将面向文件的数据转换为更适合 MapReduce 的更清晰、基于行的格式。)

我不介意我有多少个输出文件,但每个Map的输出最多只能在一个输出文件中,并且每个输出文件都必须排序。

  • 如果我使用 numReducers=0 运行,它运行得很快,并且每个 Mapper 写出自己的输出文件,这很好 - 但文件没有排序。
  • 如果我添加一个 reducer(普通 Reducer.class),这会向单个文件添加一个不必要的全局排序步骤,这会花费很多小时(比 Map 任务花费的时间长得多)。
  • 如果我添加多个 reducer,各个 map 作业的结果会混合在一起,因此一个 Map 的输出最终会出现在多个文件中。

有没有办法说服 Hadoop 对每个作业的输出执行映射端排序,而不使用 Reducers 或任何其他跳过缓慢的全局合并的方法?

最佳答案

进行全局排序的一种方法是使用自定义分区程序并为您的 reducer 进行范围分区。为此,您必须知道映射器输出键的范围。您可以将键范围划分为 n 个存储桶,其中 n 是 reducer 的数量。根据键映射到的存储桶,映射器输出被路由到特定的缩减器。

每个reducer的输出都是排序的。由于范围分区,所有 reducer 输出的集合都是全局排序的。您所要做的就是按照与文件名中的 5 位数字相同的顺序获取 reducer 输出文件。

需要注意的一件事是 key 分布的偏差,这将导致集群中的 reducer 负载不均匀。如果你有分布信息,即 key 的直方图,这个问题可以得到缓解。然后你可以让你的桶长度不相等,每个桶持有大约相同数量的 key 。

希望对您有所帮助。

关于hadoop - 使用零 Reducers 时,我能否从 Hadoop 获得单独排序的 Mapper 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3118019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com