5

我对hadoop有点陌生。根据我的知识桶是固定的。hive 表和 hive 中的分区数使用 no。减速机数量与总数量相同。创建表时定义的桶数。所以谁能告诉我如何计算总数。蜂巢表中的桶。有没有计算桶总数的公式?

4

4 回答 4

8

让我们来看一个场景,其中表大小为:2300 MB,HDFS 块大小:128 MB

现在,除以 2300/128=17.96

现在,记住桶的数量永远是 2 的幂。

所以我们需要找到 n 使得 2^n > 17.96

n=5

所以,我将使用桶数作为 2^5=32

希望,它会帮助你们中的一些人。

于 2019-03-06T06:19:26.077 回答
1

从文档 链接

一般来说,桶号由表达式 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'

于 2015-06-09T15:31:31.787 回答
1

如果您想知道应该在CLUSTER BY子句中选择多少个存储桶,我认为最好选择一个导致存储桶等于或略低于您的 HDFS 块大小的数字。

这应该有助于避免 HDFS 将内存分配给大部分为空的文件。

还要选择一个是 2 的幂的数字。

您可以使用以下命令检查您的 HDFS 块大小:

hdfs getconf -confKey dfs.blocksize
于 2016-04-20T20:34:03.643 回答
1

最佳桶数为(B * HashTableSize of Table)/节点总内存,B=1.01

于 2018-08-09T09:34:41.587 回答