如何减少 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”的生成文件?的主要内容,如果未能解决你的问题,请参考以下文章

Hive简介及使用

Hive SQL优化思路

Hive SQL优化思路

Hive SQL优化思路

Hive SQL优化思路

016-Hadoop Hive sql语法详解6-job输入输出优化数据剪裁减少job数动态分区