Hadoop - 如何从实现可写接口(interface)切换到使用 Avro 对象?

标签 hadoop mapreduce avro writable

我正在使用 Hadoop 将 JSON 转换为 CSV 文件,以便通过 Hive 访问它们。

目前,Mapper 正在填充自己的数据结构,并使用 JSON-Smart 解析 JSON。然后,reducer 读出该对象并将其写入文件,以逗号分隔。 为了加快速度,我已经在数据结构中实现了可写接口(interface)......

现在我想使用Avro作为数据结构对象以获得更多的灵活性和性能。我如何更改我的类以使它们交换 Avro 对象而不是可写对象?

最佳答案

Hadoop 通过 SerializationFactory 提供可插入序列化机制.

默认情况下,Hadoop 使用 WritableSerialization类来处理实现 Writable 接口(interface)的类的反序列化,但您可以注册实现 Serialization 的自定义序列化程序。通过设置 Hadoop 配置属性 io.serializations(实现序列化接口(interface)的类的 CSV 列表)来实现接口(interface)。

Avro 在AvroSerialization 中有一个Serialization 接口(interface)的实现。类 - 因此这将是您在 io.serializations 属性中配置的类。

Avro 实际上有一大堆帮助器类,可以帮助您编写 Map/Reduce 作业以使用 Avro 作为输入/输出 - 有一些 examples in the source (Git copy)

目前我似乎找不到任何关于 Avro 和 Map Reduce 的好的文档,但我确信还有一些其他好的示例。

关于Hadoop - 如何从实现可写接口(interface)切换到使用 Avro 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14816092/

相关文章:

java - NoSuchMethodError : org. apache.htrace.core.Tracer$Builder

hadoop - 想要在使用 pig 的记录中找到最大记录

avro - 将 JSON 转换为 Parquet

hadoop - 将命令行参数传递给 jvm(java) 映射器任务

performance - Protocol Buffers 和 Avro 中 ZigZag 编码背后的原因是什么?

java - Avro 与 Protobuf 性能对比

hadoop - 无法查询 Spark 创建的 Parquet 文件

hadoop - Nutch FetchData 作业太慢

hadoop:0 reducer 和 identity reducer 之间的区别?

hadoop - Hadoop YARN 中的 Map 和 Reduce 任务内存设置