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

Tim*_*ohl 2 hadoop mapreduce writable avro

我正在使用Hadoop将JSON转换为CSV文件以使用Hive访问它们.

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

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

Chr*_*ite 5

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

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

Avro SerializationAvroSerialization类中有一个接口的实现- 所以这将是你在io.serializations属性中配置的类.

Avro实际上有一大堆辅助类可以帮助你编写Map/Reduce作业以使用Avro作为输入/输出 - 源代码中有一些例子(Git副本)

我现在似乎找不到任何关于Avro和Map Reduce的好文档,但我确信还有一些其他很好的例子.