Java 如果定制分区器为具有相同密钥的记录选择不同的分区,该怎么办?

Java 如果定制分区器为具有相同密钥的记录选择不同的分区,该怎么办?,java,hadoop,mapreduce,partitioner,Java,Hadoop,Mapreduce,Partitioner,在学习Hadoop MapReduce时,我遇到了如何创建自定义分区器类。我知道我们需要在类中定义抽象的getPartition方法。该方法应该返回当前键值对的分区号(整数) 现在,分区的数量将等于作业的reduce任务的数量。如果在自定义分区程序中,编写一些逻辑来根据“值”而不是“键”选择分区,会怎么样?据我所知,这可能意味着具有相同键(但不同值)的记录可能由不同的reduce任务处理,这不是MapReduce所保证的。这不是反常现象吗?为什么我们甚至需要getPartition(key,va

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


现在,分区的数量将等于作业的reduce任务的数量。如果在自定义分区程序中,编写一些逻辑来根据“值”而不是“键”选择分区,会怎么样?据我所知,这可能意味着具有相同键(但不同值)的记录可能由不同的reduce任务处理,这不是MapReduce所保证的。这不是反常现象吗?为什么我们甚至需要getPartition(key,value,numPartitions)方法中的'value'参数呢?如果不正确,请更正我的理解。

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

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

谢谢你的回复。我遇到了以下链接,其中分区是根据值选择的。我很想知道在这种情况下会发生什么。两个不同的分区可以接收具有相同密钥的记录吗?