我已经在hive中编写了insert overwrite分区,将分区中的所有文件合并到更大的文件中,
SQL:
SET hive.exec.compress.output=true;
set hive.merge.smallfiles.avgsize=2560000000;
set hive.merge.mapredfiles=true;
set hive.merge.mapfiles =true;
SET mapreduce.max.split.size=256000000;
SET mapreduce.min.split.size=256000000;
SET mapreduce.output.fileoutputformat.compress.type =BLOCK;
SET hive.hadoop.supports.splittable.combineinputformat=true;
SET mapreduce.output.fileoutputformat.compress.codec=${v_compression_codec};
INSERT OVERWRITE TABLE ${source_database}.${table_name} PARTITION (${line}) n SELECT ${prepare_sel_columns} n from ${source_database}.${table_name} n WHERE ${partition_where_clause};n"
通过上面的设置,我得到了压缩的输出,但生成输出文件所需的时间太长。
即使它只运行地图作业,也需要很多时间。
从配置单元侧查找任何进一步的设置,以调整插入以运行得更快。
指标
15 GB文件===需要10分钟
SET hive.exec.compress.output=true; SET mapreduce.input.fileinputformat.split.minsize=512000000; SET mapreduce.input.fileinputformat.split.maxsize=5120000000; SET mapreduce.output.fileoutputformat.compress.type =BLOCK; SET hive.hadoop.supports.splittable.combineinputformat=true; SET mapreduce.output.fileoutputformat.compress.codec=${v_compression_codec};
上述设置帮助很大,持续时间从10分钟降至1分钟。