hive合并属性不适用于小文件

时间:2016-04-05 04:04:26

标签: hadoop merge

我正在尝试将数据插入到创建大量小文件的动态分区表中,我已经设置了如下的hive属性,但我仍然看到分区文件夹中的小文件,每个任务的大小和avgfile大小似乎都在工作对我来说,分区文件夹中的文件超出了我给出的每个任务的大小。 任何帮助将不胜感激 hive.merge.mapfiles=true; hive merge mapredfiles = true hive.merge.size.per.task=10000; hive.merge.smallfiles.avgsize=100;

3 个答案:

答案 0 :(得分:1)

您的示例显示您将平均大小设置为100个字节,这将创建大量小文件,并且很可能被忽略,因为文件已经大于此。尝试将此值增加到平均128MB(134217728),这应该会在作业完成后平均增加合并文件的大小。

set hive.merge.smallfiles.avgsize = 134217728;

答案 1 :(得分:0)

当您在单个Hive表中执行多个插入时,可能会发生这种情况。单个插入可以在HDFS位置下生成一个或多个文件。

我通过执行以下命令来管理这种情况 - 这将压缩表并将所有文件合并为一个(或更大的)

虽然存在一个限制,但您无法在hive表中使用索引来执行合并命令。

我还从Spark SQL对ORC文件进行了测试 - (1.5.2),它运行正常。

ALTER TABLE schema.table PARTITION (month = '01') CONCATENATE

希望有所帮助

答案 2 :(得分:0)

在配置单元中使用小型文件是一个常见问题,也可以通过使用CombineHiveInputFormat作为输入格式来解决。也可以通过默认使用ORC文件: 设置hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

这将有助于为配置单元中的给定小文件更快地运行配置单元作业。