zoukankan      html  css  js  c++  java
  • MapReduce处理大(小)文件的方式

    1.输入大文件时

    conf.setLong(FileInputFormat.SPLIT_MINSIZE,1024*1024*256L); //小于这个数据时进行合并
    conf.setLong(FileInputFormat.SPLIT_MAXSIZE,1024*1024*1024); //大于这个数据时进行切分

    2.输入大量小文件时

    方式一:小文件先进行Merge操作再使用MapReduce

    方式二:使用FileInputFormat子类CombineFileInputFormat重写RecordReader()将多个input path合并成一个InputSplit

    /*
     * 实现CombineFilelnputFormat,合并小文件。
     */
    public class MCombineInputFormat extends CombineFileInputFormat<ImmutableBytesWritable,KeyValue>{
    
        @Override
        protected boolean isSplitable(JobContext context, Path filename) {
            //return false;
            //FileInputFormat用isSplitable方法来指定对应的文件是否支持数据的切分,默认情况下都是支持的,也就是true
            return true;
        }
    
        @Override
        public RecordReader<ImmutableBytesWritable, KeyValue> createRecordReader(
                InputSplit split, TaskAttemptContext context) throws IOException {
            return new CombineFileRecordReader<ImmutableBytesWritable, KeyValue>((CombineFileSplit)split,context,HFileRecordReader.class);
        }
    
    }
  • 相关阅读:
    C#
    C#
    C#
    创建一个ROS包
    创建一个工作空间
    ROS的文件系统
    单一职责原因
    策略模式
    UML类图
    简单工厂模式
  • 原文地址:https://www.cnblogs.com/zyanrong/p/14914866.html
Copyright © 2011-2022 走看看