确定Hive表上的Bucketing配置

时间:2015-07-22 14:14:54

标签: hadoop hive

我很好奇是否有人可以提供一些关于如何在Hive表上配置bucketing属性的更多说明。我看到它有助于连接,我相信我读到将它放在你将用来加入的列上是好的。那可能是错的。我也很好奇如何确定要选择的桶数。

如果有人能够提供一个简短的解释和一些文件,说明如何确定所有这些很棒的事情。

提前感谢您的帮助。

克雷格

2 个答案:

答案 0 :(得分:1)

如果您想首先在表格中实施分组,则应设置属性

设置hive.enforce.bucketing = true;

它将强制执行分组。

肉体:列的可能值。

如果你使用Cluster By子句实现bucketing,你的bucketing列应该具有很高的生命力,那么你将获得更好的性能。

如果你使用Partitioned By子句实现分区,你的分区列应该具有较低的生命力,那么你将获得更好的性能

根据用例,您可以选择桶数。最好选择(桶数)< (你的hdfs块大小)它应该是2的幂。 bucketing将始终创建文件而不是目录。

答案 1 :(得分:0)

以下是在设计存储桶时需要考虑的一些建议。

  1. 存储桶通常是在最关键的列,单个列或一组列上创建的,因此它意味着这些列将成为各种连接条件的主要列,因为存储的概念是对这些列进行哈希处理并以这样的方式存储它,以便从hdfs更容易访问。因此检索速度很快。建议不要仅使用所有连接列的关键,我们认为这会提高性能。
  2. 桶的数量将在2的指数中。桶的数量决定了要运行的reducer的数量,并确定存储数据的最终数量文件。因此,必须设计桶的数量,同时牢记我们正在处理的数据的大小,并记住在hdfs中避免大量小文件和少量大文件,从而提高了hive查询检索速度和优化。