什么是jenkinshash在hadoop保证?

时间:2013-04-19 14:06:28

标签: hash hadoop hashcode

我知道jenkinshash为给定值生成一个整数(2 ^ 32)。此链接的文档: http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/util/JenkinsHash.html

说 返回:     一个32位的值。密钥的每一位都会影响返回值的每一位。两个密钥相差一两位的密钥将具有完全不同的哈希值。

对于给定的值,jenkinshash最多可以返回2 ^ 32个不同的结果。 如果我的值超过2 ^ 32怎么办? 它会为两个不同的值返回相同的结果吗?

由于

1 个答案:

答案 0 :(得分:2)

与大多数哈希函数一样,它可能会返回不同输入数据的重复哈希值。根据您链接的文档,保证是与一位或两位不同的值是不同的。只要它们与3位或更多位不同,您就没有唯一性保证。

散列函数的输入数据可以具有比散列输出更大的大小(具有更多唯一输入值)。这通常使得输出数据中必须存在重复项。考虑一个散列函数,它输出1-10范围内的整数但是在1-100范围内输入:很明显,多个值必须散列到相同的值,因为你不能枚举值{{1仅使用十个不同的整数。这称为pigeonhole principle

然而,任何良好的散列函数都会尝试均匀分布输出值。在1-100示例中,您可以期望良好的散列函数,使1-102的次数大致相同。

保证唯一性的散列函数称为perfect hash functions。它们都提供与输入数据至少相同基数的输出数据。输入整数6的完美散列函数必须至少具有100个不同的输出值。

请注意,according to Wikipedia Jenkins哈希函数加密。这意味着你应该避免它们用于密码安全性等,但你可以使用哈希来进行有些均匀的工作分配和校验和。