如果为具有相同密钥的记录创建自定义分区程序 select 不同的分区怎么办?

What if a custom partitioner is made to select different partitions for records having the same key?

在学习 Hadoop MapReduce 时,我遇到了如何创建自定义分区程序 class。我知道我们需要在 class 中定义抽象的 getPartition 方法。此方法应该 return 当前键值对的分区号(整数)。

现在,分区数将等于该作业的 reduce 任务数。如果在自定义分区程序中,根据 'value' 而不是 'key' 向 select 分区写入一些逻辑怎么办?根据我的理解,这可能意味着具有相同键(但不同值)的记录可能由不同的 reduce 任务处理,这不是 MapReduce 所保证的。这不是异常吗?为什么我们甚至需要 getPartition(key, value, numPartitions) 方法中的 'value' 参数?理解有误请指正

分区程序对中间键值对进行操作,这些键值对只是在将数据溢出到磁盘之前的映射输出。由于它对映射输出进行操作,因此它使用为映射键和值指定的相同可写对象,因此它同时使用键和值。 partitioner 的主要思想是避免单个reducer 获取几乎所有数据的倾斜,因此在计算分区索引时不需要使用value。根据权威指南,甚至 值也被忽略

可以根据中间(映射器在将数据溢出到磁盘之前的输出)键或值进行分区。当您根据值进行分区时,两个不同的分区可以包含具有相同键的记录。