hadoop中的jenkinshash保证了什么?

um6iljoc  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(514)

我知道jenkinshash为给定的值生成一个整数(2^32)。此链接上的文档:http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/util/jenkinshash.html
表示返回:32位值。键的每一位都会影响返回值的每一位。两个不同于一位或两位的键将具有完全不同的散列值。
对于给定的值,jenkinshash最多可以返回2^32个不同的结果。如果我有超过2^32个值呢?对于两个不同的值,它会返回相同的结果吗?
谢谢

tnkciper

tnkciper1#

与大多数散列函数一样,是的,它可能会为不同的输入数据返回重复的散列值。根据您链接到的文档,可以保证一位或两位不同的值是不同的。一旦它们与3位或更多位不同,就没有唯一性保证。
散列函数的输入数据可以比散列函数的输出大(具有更多唯一的输入值)。这使得输出数据中必须存在重复项。考虑一个输出范围内整数的哈希函数 1-10 但输入范围 1-100 :很明显,多个值必须散列为同一个值,因为您无法枚举这些值 1-100 只使用十个不同的整数。这就是所谓的鸽子洞原理。
但是,任何好的散列函数都会尝试平均分配输出值。在 1-10 例如,您可以期望一个好的哈希函数 2 大约相当于 6 .
保证唯一性的散列函数称为完美散列函数。它们都提供了至少与输入数据相同基数的输出数据。输入整数的完美散列函数 1-100 必须至少有100个不同的输出值。
请注意,根据wikipedia,jenkins散列函数不是加密函数。这意味着您应该避免使用它们来保护密码等安全性,但是您可以使用哈希来进行更均匀的工作分配和校验和。

相关问题