二级排序如何在Hadoop中运行?

时间:2013-12-27 20:03:06

标签: hadoop mapreduce

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

这是关键类

public class KeyClass extends Configured implements WritableComparable<KeyClass >{

   public boolean secondary;
   public String primary;
    ...

}

2 个答案:

答案 0 :(得分:1)

reduce获取单个键和值列表(可迭代)。您获得的密钥与列表中的一个值相关联。如果要访问辅助键(在值列表中正在更改的复合键值部分),则应将该辅助键放在值中。

答案 1 :(得分:0)

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

我最后一次使用二级排序(很久以前)我发现当我得到下一个值(即在迭代器上调用.next())时,框架也会改变键的实例。 / p>

这听起来很奇怪,这就是我记得它的原因。

请验证您正在使用的Hadoop版本中是否仍然如此。