确定配置单元表中的存储桶数?

66bbxpm5  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(397)

我有两张体积差不多相等的 hive table。
记录计数(大约):5779062484
两个表都有3个键:loc\u id(int)、item\u id(int)、week\u detail(string)
我在上述键的基础上连接(内部连接)两个表,结果数据的大小相同。e、 g.5779062484号
加入的总时间约为。3小时。
我想把这两张table都扣起来,然后加入进来提高性能。
我应该在哪一列使用多少桶?
我只是在内部联接的基础上直接从两个表中选择数据。
另外,请告诉我是否可以使用群集中的任何特定设置来提高性能?

dojqjjoe

dojqjjoe1#

要记住的几件事(根据我自己的经验):
不要使存储桶变小,最好大于hdp块大小(最新距离为128mb)。
这意味着,如果您的item\u id在1-1000范围内,您可能会有1000个大小为~5mb的存储桶,这会增加“hdp小文件问题”,因此不是首选(简而言之:当hdfs中有许多小文件时,namenode将承受沉重的负担)
根据这一点,你应该有大约40桶。
你也可以选择基于所有主键的bucket,但我不知道与仅基于一个键的bucketing相比,效率/速度是否有所提高。也许你可以试试。非常有兴趣听到结果。我认为,如果你在所有的关键桶(约40桶),你会得到最大的速度提高,但这只是一个理论猜测。
对于设置,我会打开tez。以下是我的选项(或根据集群/节点大小的多种选项):hive.tez.container.size=10240--hiveconf hive.tez.java.opts=-xmx8192m
旁注:对于大多数配置单元操作,我通常使用sparksql,但是spark在当前版本中仍然不支持bucketed或transactional表。

相关问题