我有两个蜂巢表,其体积相等 .记录数(Aprox):5779062484两个表都有3个键:loc_id(int),item_id(int),week_detail(string)我基于上面的键加入(内连接)两个表,结果数据大小相同 . 例如5779062484加入的总时间是aprox . 3小时 .我想把两个表都打乱,然后加入以提高性能 .我应该使用多少桶和多少列?我只是在内连接的基础上直接从两个表中选择数据 .另请告诉我,我可以使用群集中的任何特定设置来提高性能吗?
很少有事情需要记住(根据我自己的经验):
不要将桶变小,最好大于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或事务表 .
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或事务表 .