我对hadoop有点陌生。根据我的知识桶是固定的。hive 表和 hive 中的分区数使用 no。减速机数量与总数量相同。创建表时定义的桶数。所以谁能告诉我如何计算总数。蜂巢表中的桶。有没有计算桶总数的公式?
4 回答
让我们来看一个场景,其中表大小为:2300 MB,HDFS 块大小:128 MB
现在,除以 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 取决于分桶列的类型。对于 int,很简单,hash_int(i) == i。例如,如果 user_id 是一个 int,并且有 10 个桶,我们希望所有以 0 结尾的 user_id 都在桶 1 中,所有以 1 结尾的 user_id 都在桶 2 中,等等。对于其他数据类型,它是有点棘手。特别是,BIGINT 的哈希值与 BIGINT 不同。字符串或复杂数据类型的哈希值将是从值派生的某个数字,但不是任何人类可识别的数字。例如,如果 user_id 是一个字符串,那么 user_id'
如果您想知道应该在CLUSTER BY
子句中选择多少个存储桶,我认为最好选择一个导致存储桶等于或略低于您的 HDFS 块大小的数字。
这应该有助于避免 HDFS 将内存分配给大部分为空的文件。
还要选择一个是 2 的幂的数字。
您可以使用以下命令检查您的 HDFS 块大小:
hdfs getconf -confKey dfs.blocksize
最佳桶数为(B * HashTableSize of Table)/节点总内存,B=1.01