gpt4 book ai didi

hadoop - MapReduce 中的自定义动态分区

转载 作者:可可西里 更新时间:2023-11-01 16:35:25 29 4
gpt4 key购买 nike

我正在使用 MapReduce 来处理我的数据。我需要将输出存储在日期分区下。我的排序键是日期字符串。现在,如果我在我的自定义分区程序类中覆盖 getPartition 以返回以下内容:

return (formattedDate.hashCode() & Integer.MAX_VALUE) % numReduceTasks;

因为我们使用哈希和 Mod,在某些情况下我们返回相同的整数值例如:假设 numReduceTasks=100

现在日期 2018-01-20 的哈希值可能为 101。所以 101%100 = 1

现在将其他日期设为 2018-02-20,哈希值可能为 201。因此 201%100 = 1 因此,我们最终将多个日期文件转到单个日期分区。这是不希望的。关于如何处理这个问题的任何指示?

最佳答案

我认为在这种情况下,您不应该探索使用 Partitioner 和多个 reducer。除非您知道数据集中有多少个唯一日期,否则您将无法设置缩减器的数量。

使用MultipleOutputs而不是将输出发送到多个文件。 (文件,但不是目录)。如果您需要跨不同的目录发送它们,您可以在 MR 之后的驱动程序调用中执行一个步骤,该步骤将迭代输出目录并根据文件名开始模式将文件移动到目录,在这种情况下将是日期值。

有关使用 MO 的示例,请参阅 this .

另一种选择是运行法线图缩减,将输出存储到常规 o/p 目录,在其上创建一个配置单元表并执行动态分区以根据日期列将输出发送到不同的目录。

关于hadoop - MapReduce 中的自定义动态分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54561315/

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