【问题标题】:Hdfs text file to parquet format using map reduce job使用 map reduce 作业将 HDFS 文本文件转换为镶木地板格式
【发布时间】:2015-12-10 17:32:46
【问题描述】:

我正在尝试使用 java 中的 map reduce 将 hdfs 文本文件转换为 Parquet 格式。老实说,我是这方面的初学者,无法找到任何直接参考。

转换应该是文本文件 --> avro ---> parquet..?

【问题讨论】:

    标签: java mapreduce parquet


    【解决方案1】:

    文本文件(无论是否在 HDFS 中)没有固有的文件格式。使用 Map/Reduce 时,您将需要一个 Avro Schema 和一个映射器函数来解析输入,以便您可以创建一个 Avro GenericRecord

    您的映射器类将如下所示。

    public class TextToAvroParquetMapper
            extends Mapper<LongWritable, Text, Void, GenericRecord> {
        private GenericRecord myGenericRecord = new GenericData.Record(mySchema);
    
        @Override
        protected void map(LongWritable key, Text value, Context context) {
              // Parse the value yourself here,
              // calling "put" on the Avro GenericRecord,
              // once for each field.  The GenericRecord
              // object is reused for every map call.
              context.write(null, myGenericRecord);
        }
    }
    

    输入键/值对类型是 Hadoop 的 LongWritableText,输出键/值对类型是 Void(空键)和 Avro GenericRecord 本身。

    run方法中,照常设置Job配置,包括输入路径、输出路径、映射器类。将reduce任务的数量设置为0,因为这是一个map-only作业。

    job.setNumReduceTasks(0);
    

    将输出格式类设置为ParquetAvroParquetOutputFormat 类,这会将您创建的Avro GenericRecords 转换为Parquet 列格式。它需要知道你的Avro Schema

    job.setOutputFormatClass(AvroParquetOutputFormat.class);
    AvroParquetOutputFormat.setSchema(job, myAvroSchema);
    

    因为 AvroParquetOutputFormat 将 Avro GenericRecord 转换为 Parquet Group 对象,您需要将输出值类设置为 Group(并将输出键类设置为 Void,因为键将都是null)。

    job.setOutputKeyClass(Void.class);
    job.setOutputValueClass(Group.class);
    

    是的,转换是文本文件 -> Avro -> Parquet。您的 map 方法控制从文本文件到 Avro 的转换,AvroParquetOutputFormat 处理从 Avro 到 Parquet 的转换。

    【讨论】:

    • 如果我想即时构建架构怎么办?如何在 Driver 中设置如下架构? , AvroParquetOutputFormat.setSchema(job, myAvroSchema);
    猜你喜欢
    • 2020-08-13
    • 2018-11-09
    • 2019-02-03
    • 2019-05-26
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2014-11-25
    • 2018-05-06
    相关资源
    最近更新 更多