在学习 Hadoop MapReduce 时,我遇到了如何创建自定义 Partitioner 类。我知道我们需要在我们的类中定义抽象的 getPartition 方法。此方法应该返回当前键值对的分区号(整数)。
现在,分区的数量将等于作业的 reduce 任务的数量。如果在自定义分区程序中,写一些逻辑来根据“值”而不是“键”选择分区怎么办?根据我的理解,这可能意味着具有相同键(但值不同)的记录可能会被不同的 reduce 任务处理,这不是 MapReduce 所保证的。这不是异常吗?为什么我们甚至需要 getPartition(key, value, numPartitions) 方法中的 'value' 参数?如果不正确,请纠正我的理解。