代码测试环境:Hadoop2.4
应用场景:当需要处理很多小数据文件的时候,可以应用此技巧来达到高效处理数据的目的。
原理:应用CombineFileInputFormat,可以把多个小数据文件在进行分片的时候合并。由于每个分片会产生一个Mapper,当一个Mapper处理的数据比较小的时候,其效率较低。而一般使用Hadoop处理数据时,即默认方式,会把一个输入数据文件当做一个分片,这样当输入文件较小时就会出现效率低下的情况。
实例:
参考前篇blog:hadoop编程小技巧(5)---自定义输入文件格式类InputFormat,不过这次输入使用两个输入文件,都是小数据量的数据文件。
自定义输入文件格式:CustomCombineFileInputFormat:
package fz.combineinputformat;
import java.io.IOException;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat;
import org.apache.had