posts - 495,comments - 227,trackbacks - 0

http://www.rigongyizu.com/mapreduce-job-one-map-process-one-file/

有一批数据用hadoop mapreduce job处理时,业务特点要求一个文件对应一个map来处理,如果两个或多个map处理了同一个文件,可能会有问题。开始想通过设置 dfs.blocksize 或者 mapreduce.input.fileinputformat.split.minsize/maxsize 参数来控制map的个数,后来想到其实不用这么复杂,在自定义的InputFormat里面直接让文件不要进行split就可以了。

public class CustemDocInputFormat extends TextInputFormat {
 
    @Override
    public RecordReader<LongWritable, Text> createRecordReader(InputSplit split, TaskAttemptContext context) {
        DocRecordReader reader = null;
        try {
            reader = new DocRecordReader(); // 自定义的reader
        } catch (IOException e) {
            e.printStackTrace();
        }
        return reader;
    }
 
    @Override
    protected boolean isSplitable(JobContext context, Path file) {
        return false;
    }
}

这样,输入文件有多少个,job就会启动多少个map了。

posted on 2014-09-16 09:28 SIMONE 阅读(519) 评论(0)  编辑  收藏 所属分类: hadoop

只有注册用户登录后才能发表评论。


网站导航: