二级排序在Hadoop中是如何工作的?

二级排序在Hadoop中是如何工作的?,hadoop,mapreduce,Hadoop,Mapreduce,我知道在二级排序中,我们可以使用用户定义的类作为键。该类可以有两个属性。例如,可以根据第一个属性(自然关键点)对这些对进行分组,然后根据第二个属性(辅助关键点)进行排序。我的问题是,键对象的第二个属性(辅键)具有不同的值。因此减速机无法接收单个键。也就是说,reducer应该接收一个键列表,因为每个键的第二个属性(辅助键)都有不同的值。是这样吗 这是重点课程 public class KeyClass extends Configured implements WritableComparabl

我知道在二级排序中,我们可以使用用户定义的类作为键。该类可以有两个属性。例如,可以根据第一个属性(自然关键点)对这些对进行分组,然后根据第二个属性(辅助关键点)进行排序。我的问题是,键对象的第二个属性(辅键)具有不同的值。因此减速机无法接收单个键。也就是说,reducer应该接收一个键列表,因为每个键的第二个属性(辅助键)都有不同的值。是这样吗

这是重点课程

public class KeyClass extends Configured implements WritableComparable<KeyClass >{

   public boolean secondary;
   public String primary;
    ...
public class KeyClass扩展配置的实现可写性{
公立中学;
公共字符串主键;
...

}reduce获得一个键和一个值列表(一个Iterable)。您获得的键与列表中的一个值相关联。如果要访问次键(组合键值中在值列表中更改的部分),则也应将该次键放入值中。

是的,您是正确的。 你应该得到一个键列表,但你没有(不是在列表的意义上)

上次玩secondary sort(很久以前)时,我发现当我得到下一个值时(即在迭代器上调用.next()),键的实例也会被框架更改

这听起来很奇怪,这就是为什么我记得它


请验证您正在使用的Hadoop版本中是否仍然存在这种情况。

我在原始问题中添加了密钥类。假设键的
primary
属性的值为“123”。此键的
辅助属性的值是多少?值是否根据列表中的次要属性排序?除非指定SortComparator和GroupComparator,否则在序列化键(hadoop可写)时,键将按您写入的字节数组排序。如果只想按String属性排序,则需要实现一个SortComparator,该SortComparator使用键中的attar值。您还需要实现一个比较字符串和布尔值的GrouperComparator。最后,您需要一个分区程序来仅根据字符串值选择一个分区。