首页 文章

确定hive表中的桶数?

提问于
浏览
-1

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

1 回答

  • 1

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

    • 不要将桶变小,最好大于hdp块大小(最新的dist为128mb) .

    • 这意味着如果你的item_id在1-1000的范围内你可以拥有1000个大小约为5mb的桶,这会增加"hdp small file problem",因此不是首选 . (简而言之:当hdfs中有许多小文件时,namenode会负担沉重)

    • 根据这个你应该有大约40桶 .

    • 您也可以选择基于所有主键进行存储,但我不知道是否基于一个键提高了效率/速度 . 也许你可以测试一下 . 非常有兴趣听听结果 . 我想如果你把所有的钥匙(约有40个桶)放在一边,你将获得最大的速度提升,但这只是一个理论猜测 .

    • 对于设置我会打开Tez . 这些是我的选择(或多个这取决于群集/节点大小):hive.tez.container.size = 10240 --hiveconf hive.tez.java.opts = -Xmx8192m

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

相关问题