Hadoop MapReduce编程

3

如何使用Hadoop mapreduce编程获取排序的输出。

是否有任何方法可以按键或值的方式获取最终的键值对。

非常感谢您提供的任何指针。

谢谢 R

2个回答

6

默认情况下,MapReduce会根据它们的键对输入记录进行排序。

然而,下载最新的Hadoop版本并查看他们的示例可能会更有帮助。也有不同的排序示例。

如果您需要更多关于排序顺序的信息,可以按以下方式更改:

键的排序顺序由RawComparator控制,如下所示:

  1. 如果设置了属性mapred.output.key.comparator.class,则使用该类的实例。(JobConf的setOutputKeyComparatorClass()方法是设置此属性的便捷方式。)

  2. 否则,键必须是WritableComparable的子类,并使用键类的注册比较器。

  3. 如果没有注册比较器,则使用一个RawComparator将要比较的字节流反序列化为对象,并委托给WritableComparable的compareTo()方法。这些规则强调了为自己的自定义Writable类注册优化版本的RawComparators的重要性,以及通过设置自己的比较器轻松覆盖排序顺序。


1
内置的WritableComparable类将正确比较,因此如果它是LongWritable,则会按降序排序。如果您想要自己的排序顺序,例如按文本字符串排序,然后在该顺序内按时间戳对值进行排序,则需要自定义键、自定义排序比较器和自定义分组比较器。 - Drizzt321

3

"Hadoop权威指南"第二版第8章介绍了全局排序,其中包含代码示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接