我正在尝试将数据插入到创建大量小文件的动态分区表中,我已经设置了如下的hive属性,但我仍然看到分区文件夹中的小文件,每个任务的大小和avgfile大小似乎都在工作对我来说,分区文件夹中的文件超出了我给出的每个任务的大小。
任何帮助将不胜感激
hive.merge.mapfiles=true;
hive merge mapredfiles = true
hive.merge.size.per.task=10000;
hive.merge.smallfiles.avgsize=100;
答案 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
这将有助于为配置单元中的给定小文件更快地运行配置单元作业。