hadoop - 将 AVRO 数据写入 Hadoop hdfs

标签 hadoop apache-kafka avro

我有一个 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/

相关文章:

hadoop - 运行mapreduce作业根本没有输出。它甚至没有运行。很奇怪。终端上没有错误

Hadoop:用多棵树(采样说 N,说 x RandomTree)训练大数据(以 GB 为单位)并测试

java - 处理从 Kafka 检索到的每条记录后,正确的提交方式是什么?

java - kafka Avro 多个主题的消息反序列化器

hadoop - Presto查询HIVE表异常:无法列出目录

hadoop - 使用默认用户的Resource Manager API-Webuser

java - 如何提取 Kafka Streams 消息中嵌入的时间戳

apache-kafka - Logstash 与 Kafka 有何不同

java - 如何使用 apache avro SchemaBuilder 更新现有的 avro 模式?

types - avro 中的 map 和记录有什么区别?