我知道Java中哈希地图的散列原理,所以想知道当我们在各个桶中存储数据时哈希如何为Hive工作。
答案 0 :(得分:6)
我最近不得不深入研究一些Hive源代码来自己解决这个问题。这是我发现的:
对于整数字段,hash is just the integer value。对于字符串,它使用similar version Java's String hashCode。散列多个值时,散列是Java’s List hashCode的类似版本。
答案 1 :(得分:2)
Bucketing与分区一起使用以具有更多分解结构以供将来分析。随着更多分区导致更多hdfs文件可能影响namenode性能,我们采用bucketing。 bucketing实际工作的方式是:桶的数量由 hashFunction(bucketingColumn)mod numOfBuckets 确定 使用分区创建表时,会选择numOfBuckets。哈希函数输出取决于所选列的类型。为了在适当分组和准确定位数据时准确设置减速器的数量,我们使用" hive.enforce.bucketing = true" 。有关更多信息,请参阅this