确定配置单元 table 中的桶数?

Determine number of buckets in hive table?

我有两个蜂巢 table,体积大致相等。
记录数(大约):5779062484
table 都有 3 个键:loc_id(int), item_id(int), week_detail(string)
我在上述键的基础上加入(内部加入)两个 tables,结果数据大小相同。例如5779062484
加入的总时间约为。 3 小时。
我正在考虑对两者进行分桶 table 然后加入以提高性能。
有多少个桶以及我应该在哪一列上使用分桶?
我只是在内部连接的基础上直接从两个 table 中选择数据。
另外让我知道我可以在集群中使用任何特定设置来提高性能吗?

需要注意的几点(根据我自己的经验):

  • 不要让桶太小,最好大于 hdp 块大小(最新 dist 中为 128mb)。
  • 这意味着如果您的 item_id 在 1-1000 范围内,您可能有 1000 个大小为 ~5mb 的桶,这增加了 "hdp small file problem",因此不是首选。 (简而言之:当hdfs中有很多小文件时,namenode的负担会很重)
  • 根据这个你应该有大约 40 个桶。
  • 您也可以选择基于所有主键进行分桶,但我不知道与仅基于一个键的分桶相比是否有 efficiency/speed 改进。也许你可以测试一下。很想听听结果。我认为如果你对所有键进行存储(大约 40 个存储桶),你将获得最大的速度提升,但这只是一个理论上的猜测。
  • 对于设置,我会打开 Tez。这些是我的选项(或多个选项,具体取决于 cluster/node 大小):hive.tez.container.size=10240 --hiveconf hive.tez.java.opts=-Xmx8192m

旁注:对于大多数 Hive 操作,我通常会使用 Spark SQL,但 Spark 在当前版本中仍然不支持分桶表和事务表。