确定hive表中的桶数?

时间:2017-09-12 20:58:04

标签: hadoop hive hiveql

我有两个蜂巢表,其容量相等 记录数(Aprox):5779062484
两个表都有3个键:loc_id(int),item_id(int),week_detail(string)
我基于上面的键加入(内连接)两个表,结果数据大小相同。例如5779062484个
加入的总时间是aprox。 3小时 我想把两张桌子都打乱,然后加入以改善表现 我应该使用多少桶和多少列? 我只是在内连接的基础上直接从两个表中选择数据 另请告诉我,我可以使用群集中的任何特定设置来提高性能吗?

1 个答案:

答案 0 :(得分:1)

很少有事情要记住(根据我自己的经验):

  • 不要将水桶变小,最好大于hdp块大小(最新的128mb)。
  • 这意味着如果你的item_id在1-1000的范围内,你可以有1000个大小~5mb的桶,这会增加“hdp小文件问题”,因此不是首选。 (简而言之:当hdfs中有许多小文件时,namenode会负担沉重)
  • 根据这个,你应该有大约40个桶。
  • 您也可以选择基于所有主键进行存储,但我不知道基于一个键,是否提高了效率/速度。也许你可以测试一下。非常有兴趣听听结果。我想如果你把所有的钥匙(大约40个桶)放在一边,你将获得最大的速度提升,但这只是一个理论猜测。
  • 对于设置,我会打开Tez。这些是我的选择(或多个这取决于群集/节点大小):hive.tez.container.size = 10240 --hiveconf hive.tez.java.opts = -Xmx8192m

旁注:我通常会将Spark SQL用于大多数Hive操作,但Spark仍然不支持当前版本中的bucketed或事务表。