我有一个 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 对象,我认为这没有任何意义。我没有找到任何我想要达到的目标的例子。非常感谢任何指向相关文档的提示或链接。
最佳答案
如果我正确理解您的问题,我建议您尝试 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 被转换为字节 [],它们被放入 Kafka 主题中,然后在消费者中,根据您的模式,这些字节被转换为 GenericRecord。而且您不需要将值放入记录中的所有字段。之后,您可以将此记录写入文件。
而且,您可能还需要以其他方式访问 HDFS 中的文件,因为您无法为其创建 File 实例。
关于hadoop - 将 AVRO 数据写入 Hadoop hdfs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38915796/