From c7a9cbbdde395d11d8edbd1f1933174946c31f15 Mon Sep 17 00:00:00 2001 From: Haohui Mai Date: Sun, 22 Nov 2015 18:00:29 -0800 Subject: [PATCH] HADOOP-10555. Add offset support to MurmurHash. Contributed by Sergey Shelukhin. --- hadoop-common-project/hadoop-common/CHANGES.txt | 3 +++ .../java/org/apache/hadoop/util/hash/MurmurHash.java | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 8988ba99625..fb3029adb56 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -345,6 +345,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 diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/hash/MurmurHash.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/hash/MurmurHash.java index 6ed3dfd3df1..a5fc46342c9 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/hash/MurmurHash.java +++ b/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; }