将AVRO数据写入Hadoop hdfs

时间:2016-08-12 10:30:50

标签: hadoop apache-kafka avro

我是一名从Kafka消费avro数据的java Kafka消费者[说主题x]。它应该将这些数据推送到HDFS,因为它没有代码生成。在avro documentation中,他们会使用以下内容:

GenericRecord e1 = new GenericData.Record(schema);      
e1.put("key", "value");

DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<GenericRecord>(schema);

DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(datumWriter);
dataFileWriter.create(schema, new File("<HDFS file path>"));

dataFileWriter.append(e1);
dataFileWriter.close();

问题是,我已经有了avro数据。要使用这一系列步骤,我必须在反序列化avro数据包后提取每个键值对,然后将其推送到GenericRecord对象,我认为没有任何意义。我没有找到任何我想要实现的例子。非常感谢任何有关文档的提示或链接。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,我建议您尝试使用com.twitter.bijection.Injection和com.twitter.bijection.avro.GenericAvroCodecs包。

看看http://aseigneurin.github.io/2016/03/04/kafka-spark-avro-producing-and-consuming-avro-messages.html。 在那里,在Kafka生产者中,GenericRecord被转换为bytes [],它们放在Kafka主题中,然后在消费者中,这个字节根据你的模式被反转成GenericRecord。而且您不需要将值放在记录中的所有字段中。之后,您可以将此记录写入文件。

而且,您可能还需要以其他方式访问HDFS中的文件,因为您无法为其创建File实例。