我知道java中hashmap的散列原理,所以我想知道散列是如何在不同的bucket中处理数据的。
e7arh2l61#
我最近不得不挖掘一些Hive源代码来为自己解决这个问题。以下是我的发现:对于整型字段,哈希值就是整数值。对于字符串,它使用与java的字符串哈希代码类似的版本。当散列多个值时,散列是java列表散列代码的类似版本。
qnakjoqk2#
bucketing与分区一起使用,以便具有更多的分解结构,以便将来进行分析。由于更多的分区会导致更多的hdfs文件,这会影响namenode的性能,所以我们采用bucketing。bucketing的实际工作方式是:bucketingcolumn由hashfunction决定buckets的数量,mod numofbuckets numofbuckets是在使用分区创建表时选择的。哈希函数的输出取决于所选列的类型。为了在bucketing时准确设置减速器的数量并适当地放置数据,我们使用“hive.enforce.bucketing=true”。有关更多信息,请参阅此
2条答案
按热度按时间e7arh2l61#
我最近不得不挖掘一些Hive源代码来为自己解决这个问题。以下是我的发现:
对于整型字段,哈希值就是整数值。对于字符串,它使用与java的字符串哈希代码类似的版本。当散列多个值时,散列是java列表散列代码的类似版本。
qnakjoqk2#
bucketing与分区一起使用,以便具有更多的分解结构,以便将来进行分析。由于更多的分区会导致更多的hdfs文件,这会影响namenode的性能,所以我们采用bucketing。bucketing的实际工作方式是:bucketingcolumn由hashfunction决定buckets的数量,mod numofbuckets numofbuckets是在使用分区创建表时选择的。哈希函数的输出取决于所选列的类型。为了在bucketing时准确设置减速器的数量并适当地放置数据,我们使用“hive.enforce.bucketing=true”。有关更多信息,请参阅此