是否存在任何CombineParquetFileInputFormat?

时间:2016-01-18 07:14:10

标签: java hadoop mapreduce parquet bigdata

在我的项目中,我必须阅读镶木地板文件扔掉MapReduce。有很多小尺寸的镶木地板文件。我需要一些Combine Parquet输入格式,它可以根据分割大小组合小文件,这样Mappers的数量就会减少。如果存在一些实用程序或任何简单的方法,请告诉我。

由于

2 个答案:

答案 0 :(得分:2)

ParquetInputFormat是FileInputFormat的子代,支持多个文件输入。 因此,简而言之,您只需要不需要CombileParquetFileInputFormat

只需使用FileInputFormat.addInputPaths指定输入。

ParquetInputFormat的来源 https://github.com/Parquet/parquet-mr/blob/master/parquet-hadoop/src/main/java/parquet/hadoop/ParquetInputFormat.java

P.S。如果你有很多小的镶木地板文件,你有可能做错了。

答案 1 :(得分:0)

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.hadoop.mapreduce.lib.input.CombineFileRecordReader; 
import org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReaderWrapper; import org.apache.hadoop.mapreduce.lib.input.CombineFileSplit; 
import parquet.avro.AvroReadSupport; 
import parquet.hadoop.ParquetInputFormat;

    import java.io.IOException;

    public class CombineParquetInputFormat<T> extends CombineFileInputFormat<Void, T> {


        @Override
        public RecordReader<Void, T> createRecordReader(InputSplit split, TaskAttemptContext
                context) throws IOException {
            CombineFileSplit combineSplit = (CombineFileSplit) split;
            return new CombineFileRecordReader(combineSplit, context, CombineParquetrecordReader.class);
        }

        private static class CombineParquetrecordReader<T> extends CombineFileRecordReaderWrapper<Void, T> {


            public  CombineParquetrecordReader(CombineFileSplit split, TaskAttemptContext context, Integer idx) throws
                    IOException, InterruptedException {
                super(new ParquetInputFormat<T>(AvroReadSupport.class), split, context, idx);
            }
        } }

关于集成测试的一个很棒的博客     http://bytepadding.com/big-data/spark/combineparquetfileinputformat/