如何减少Apache Hive中的输出文件数量

时间:2013-05-12 19:54:19

标签: hadoop mapreduce hive emr

有没有人知道一种工具可以将Apache Hadoop的输出文件“压缩”成更少的文件或一个文件。目前我正在将所有文件下载到本地计算机并将它们连接到一个文件中。所以有人知道一个API或一个相同的工具。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

限制输出文件的数量意味着您要限制减速器的数量。你可以在Hive shell的mapred.reduce.tasks属性的帮助下做到这一点。示例:

hive>  set mapred.reduce.tasks = 5;

但它可能会影响查询的性能。或者,一旦完成查询,就可以使用HDFS shell中的getmerge命令。此命令将源目录和目标文件作为输入,并将src中的文件连接到目标本地文件中。

用法:

bin/hadoop fs -getmerge <src> <localdst>

HTH

答案 1 :(得分:0)

请参见https://community.cloudera.com/t5/Support-Questions/Hive-Multiple-Small-Files/td-p/204038

set hive.merge.mapfiles=true;     -- Merge small files at the end of a map-only job.
set hive.merge.mapredfiles=true;  -- Merge small files at the end of a map-reduce job.

set hive.merge.size.per.task=???; -- Size (bytes) of merged files at the end of the job.

set hive.merge.smallfiles.avgsize=??? -- File size (bytes) threshold
-- When the average output file size of a job is less than this number, 
-- Hive will start an additional map-reduce job to merge the output files 
-- into bigger files. This is only done for map-only jobs if hive.merge.mapfiles 
-- is true, and for map-reduce jobs if hive.merge.mapredfiles is true.