如何减少 Hive 中 SQL“Alter Table/Partition Concatenate”的生成文件?
Posted
技术标签:
【中文标题】如何减少 Hive 中 SQL“Alter Table/Partition Concatenate”的生成文件?【英文标题】:How to reduce generating files of SQL "Alter Table/Partition Concatenate" in Hive? 【发布时间】:2016-01-14 23:09:42 【问题描述】:Hive 版本:1.2.1
配置:
set hive.execution.engine=tez;
set hive.merge.mapredfiles=true;
set hive.merge.smallfiles.avgsize=256000000;
set hive.merge.tezfiles=true;
HQL:
ALTER TABLE `table_name` PARTITION (partion_name1 = 'val1', partion_name2='val2', partion_name3='val3', partion_name4='val4') CONCATENATE;
我使用 HQL 来合并特定表/分区的文件。但是,执行后输出目录下还有很多文件;而且它们的大小远远小于256000000。那么如何减少输出文件的数量。
顺便说一句,使用 MapReduce 代替 Tez 也没有用。
【问题讨论】:
你能发布表格 DDL 吗? 【参考方案1】:你可以将你的reducer编号设置为1,它只会创建一个输出文件。
您可以使用以下方法进行操作;
set mapred.reduce.tasks=1
【讨论】:
请检查评论:顺便说一句,使用 MapReduce 代替 Tez 也不起作用。因此,如果他愿意,他也可以使用 MapReduce。此外,您也可以将上述配置用于 Tez。 我还可以确保它确实可以解决问题。也许 tez 的故事略有不同,但它确实适用于 MapReduce,这正是用户所要求的。 我现在已经尝试过了,结果是我有 25 个文件。此外,触发的 MapReduce 作业是仅地图作业。也许您使用的是不同的 Hive 版本。我正在使用 Hive 1.2.1,文件是 ORC。在这些情况下,您的解决方案不起作用。 好吧,你能试着把映射器设置为 1 吗? 好吧,那我没主意了,很抱歉。【参考方案2】:也许你可以试试insert overwrite table ... partition ( ... ) select * from ...
这个可以使用 tezfiles 的合并设置。
【讨论】:
以上是关于如何减少 Hive 中 SQL“Alter Table/Partition Concatenate”的生成文件?的主要内容,如果未能解决你的问题,请参考以下文章