我正在使用 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/