hadoop使用lzo压缩,block块大小为512MB
环境:hadoop2.6+hive1.2.1 lzo压缩
启动压缩
set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress=true;
一.减少map数,(当有大量小文件时,启动合并)
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set mapreduce.input.fileinputformat.split.maxsize=1073741824;
set mapreduce.input.fileinputformat.split.minsize=1;
set mapreduce.input.fileinputformat.split.minsize.per.node=536870912;
set mapreduce.input.fileinputformat.split.minsize.per.rack=536870912;
经过测试,这种设置可以在map阶段和并小文件,减少map的数量。
注意:在测试的时候,如果文件格式为Textfile,并且启用lzo压缩,不能生效。 rcfile以及orc可以生效,Textfile不启用lzo压缩也可以生效。如果是新集群的话,没有历史遗留的问题的话,建议hive都使用orc文件格式,以及启用lzo压缩。
二.MR作业结束后,判断生成文件的平均大小,如果小于阀值,就再启动一个job来合并文件
set hive.merge.mapredfiles=true;
set hive.merge.mapfiles=true;
set hive.merge.mapfiles=true;
set hive.merge.smallfiles.avgsize=268435456;