将 AVRO 数据写入 Hadoop hdfs
Writing AVRO data to Hadoop hdfs
我有一个 java Kafka 消费者正在使用来自 kafka 的 avro 数据 [比如主题 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 对象,我认为这没有任何意义。我没有找到我想要达到的目标的任何例子。非常感谢对相关文档的任何提示或 link。
如果我理解你的问题是正确的,我建议你尝试 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 中的文件,因为您无法为其创建文件实例。
我有一个 java Kafka 消费者正在使用来自 kafka 的 avro 数据 [比如主题 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 对象,我认为这没有任何意义。我没有找到我想要达到的目标的任何例子。非常感谢对相关文档的任何提示或 link。
如果我理解你的问题是正确的,我建议你尝试 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 中的文件,因为您无法为其创建文件实例。