mapreduce job让一个文件只由一个map来处理

mapreduce job让一个文件只由一个map来处理

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了。

相关文章

  • 2014年8月19日 Hadoop : 一个目录下的数据只由一个map处理
  • 2014年6月27日 一个Hadoop程序的优化过程 – 根据文件实际大小实现CombineFileInputFormat
  • 2013年9月23日 hadoop用MultipleInputs/MultiInputFormat实现一个mapreduce job中读取不同格式的文件
  • 2012年1月9日 hadoop mapreduce和hive中使用SequeceFile+lzo格式数据
  • 2014年3月11日 hadoop集群DataNode起不来:“DiskChecker$DiskErrorException: Invalid volume failure config value: 1”

你可能感兴趣的:(mapreduce job让一个文件只由一个map来处理)