hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alan Chaney <a...@mechnicality.com>
Subject Inconsistencies in comparisons using KeyComparator
Date Mon, 01 Apr 2013 14:54:02 GMT
Hi

I need to write some code that sorts row keys identically to HBase.

I looked at the KeyValue.KeyComparator code, and it seems that, by 
default, HBase elects to use the 'Unsafe' comparator as the basis of its 
comparison, with a fall-back to to the PureJavaComparer should Unsafe 
not be available (for example, in tests.)

However, I'm finding that the sort order from a call to 
KeyValue.KeyComparator appears to be inconsistent between the two forms.

As an example, comparing:

(first param) (second param)
0000000000000000ffffffffffffffffffffffffffffffff616c1b to 
0000000000000000ffffffffffffffffffffffffffffffff61741b

gives 1 for the default (presumably, Unsafe) call, and -1 using the 
PureJavaComparator.

I would actually expect it to be a -ve number, based on the difference 
of 6c to 74 in the 3rd from last byte above.

Similarly

000000000000000000000000000000000000000000000000616c1b to 
0000000000000000000000000000000000000000000000061741b

gives > 0 instead of < 0. The PureJavaComparator does a byte-by-byte 
comparison by

Is this expected? From the definition of lexicographical compare that I 
found, I don't think so. There's no issue of signed comparison here, 
because 0x6c and 0x74 are still +ve byte values.

Regards

Alan



Mime
View raw message