我正在使用 Hadoop 将 JSON 转换为 CSV 文件,以便使用 Hive 访问它们。
目前,映射器正在填充自己的数据结构,用 JSON-Smart 解析 JSON。然后,reducer 读取该对象并将其写入文件,以逗号分隔。为了使这更快,我已经在数据结构中实现了可写接口......
现在我想将 Avro 用于数据结构对象以具有更大的灵活性和性能。如何更改我的类以使它们交换 Avro 对象而不是可写对象?
Hadoop 通过SerializationFactory
.
默认情况下,Hadoop 使用WritableSerialization
该类来处理实现Writable
接口的类的反序列化,但您可以Serialization
通过设置 Hadoop 配置属性io.serializations
(实现序列化接口的类的 CSV 列表)注册实现接口的自定义序列化程序。
AvroSerialization
在类中实现了接口AvroSerialization
- 所以这将是您在io.serializations
属性中配置的类。
Avro 实际上有一大堆帮助类,可以帮助您编写 Map / Reduce 作业以使用 Avro 作为输入/输出 -源代码中有一些示例(Git 副本)
目前我似乎找不到任何关于 Avro 和 Map Reduce 的好的文档,但我确信还有其他一些好的例子。