我对hadoop有点陌生。据我所知,桶是固定的。hive表中的分区,hive使用no。减速器的数量与总数相同。在创建表时定义的桶的。有人能告诉我怎么计算总数吗?在一个蜂窝表桶。是否有计算桶总数的公式?
让我们以一个场景为例,其中表大小为:2300mb,HDFS Block Size: 128mb
现在,除以2300/128=17.96
现在,记住桶的数量总是2的幂
所以我们需要找到n使2^n> 17.96
n = 5因此,我将使用桶数作为2^5=32
希望它能帮助到你们中的一些人。
来自文档链接
一般情况下,桶号由表达式决定Hash_function (bucketing_column) mod num_buckets。(有一个这里也有0x7FFFFFFF,但这不是那么重要)。的Hash_function取决于bucket列的类型。对于int,很简单,hash_int(i) == i。例如,如果user_id是int,并且有10个桶,我们期望所有以0到结尾的user_id在桶1中,所有以1结尾的user_id都在桶2中,等等。对于其他数据类型,这有点棘手。的哈希值BIGINT和BIGINT不一样。一个字符串的哈希值复杂数据类型将是一些从值派生出来的数字,但不是任何人类可识别的东西。例如,如果user_id是那么bucket 1中的user_id可能不会以0结尾。在一般来说,基于散列分布行会得到一个偶数在桶中的分布。
如果你想知道你应该在你的CLUSTER BY
子句中选择多少桶,我认为最好选择一个数字,结果桶等于或略低于你的HDFS块大小。
这将有助于避免HDFS将内存分配给大部分为空的文件。
也选一个2的幂的数
你可以检查你的HDFS块大小:
hdfs getconf -confKey dfs.blocksize
最优桶号为(B * HashTableSize of Table)/节点总内存,B=1.01
数据大小/块大小=答案2^n与答案比较。最接近的N会是no。桶的