Ver código fonte

HADOOP-10555. Add offset support to MurmurHash. Contributed by Sergey Shelukhin.

Haohui Mai 9 anos atrás
pai
commit
aac260faa1

+ 3 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -975,6 +975,9 @@ Release 2.8.0 - UNRELEASED
 
     HADOOP-10035. Cleanup TestFilterFileSystem. (Suresh Srinivas via wheat9)
 
+    HADOOP-10555. Add offset support to MurmurHash.
+    (Sergey Shelukhin via wheat9)
+
   OPTIMIZATIONS
 
     HADOOP-11785. Reduce the number of listStatus operation in distcp

+ 7 - 2
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/hash/MurmurHash.java

@@ -36,9 +36,13 @@ public class MurmurHash extends Hash {
   public static Hash getInstance() {
     return _instance;
   }
-  
+
   @Override
   public int hash(byte[] data, int length, int seed) {
+    return hash(data, 0, length, seed);
+  }
+
+  public int hash(byte[] data, int offset, int length, int seed) {
     int m = 0x5bd1e995;
     int r = 24;
 
@@ -47,7 +51,7 @@ public class MurmurHash extends Hash {
     int len_4 = length >> 2;
 
     for (int i = 0; i < len_4; i++) {
-      int i_4 = i << 2;
+      int i_4 = offset + (i << 2);
       int k = data[i_4 + 3];
       k = k << 8;
       k = k | (data[i_4 + 2] & 0xff);
@@ -67,6 +71,7 @@ public class MurmurHash extends Hash {
     int left = length - len_m;
 
     if (left != 0) {
+      length += offset;
       if (left >= 3) {
         h ^= (int) data[length - 3] << 16;
       }