要执行二级排序,我们必须创建一个扩展WritableComparable接口(interface)并实现compareTo()的复合键。

在“Hadoop:权威指南”一书中,几乎所有其他博客都显示,排序是基于扩展WritableComparator的单独类(书中的KeyComparator)的compare()方法进行的。

compare()和compareTo()都有相同的逻辑。由于WritableComparator的compare()用于对复合键进行排序,因此什么时候才真正使用CompositeKey的compareTo()?

最佳答案

Sortcomparator用于对 map 输出进行排序。如果不指定sortcomparator类,它将使用自定义可写类的comapreTo()方法。如果指定了sortcomparator,则使用它而不是自定义可写的compareTo()方法。但是,使用默认的compare(WritableComparable a, WritableComparable b)和Writablecomparable comapreTo()方法的默认compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2)没有什么好处,在该方法中,它会将流中的记录反序列化为对象并进行比较。我认为hadoop在默认的writablecomparable comapreTo()方法上使用了sortcomparator,因为前者具有最佳的compare()方法ojit_code,其中将来自流的记录进行比较而不将其反序列化为对象。

希望这能回答您的问题。

09-26 12:04