我目前正在使用带有可写的SequenceFiles的hadoop mapreduce作业。 同样的Writable类型也用于系统的非hadoop相关部分的序列化。
这种方法难以维护 - 主要是因为缺乏架构以及需要手动处理版本更改。
似乎apache avro处理这些问题。
问题是,在迁移过程中,我将获得两种格式的数据。 有一种简单的方法来处理迁移吗?
答案 0 :(得分:2)
我自己没有尝试过,但也许使用AvroSequenceFile
格式会有所帮助。它只是SequenceFile
的包装器,因此从理论上讲,您应该能够以旧的SequenceFile
格式以及新的Avro
格式编写数据,这样可以简化迁移。
此格式为more information。
答案 1 :(得分:1)
通常,没有什么可以阻止您互相使用Avro数据和SequenceFiles。使用您需要的数据类型所需的任何InputFormat,对于输出,当然有意义的是在实际使用时使用Avro格式。如果您的输入有不同的格式,请查看MultipleInputs。从本质上讲,你仍然需要实现单独的Mappers,但考虑到Map输入键/值是不同的,这是不同的。
搬到Avro是明智之举。如果你有时间和硬件的能力,甚至可能值得将你的数据从SequenceFile显式转换为Avro。您可以使用Avro支持的任何语言,它也恰好支持SequenceFiles来执行此操作。 Java肯定会(显然),但Pig也非常方便。
用户贡献PiggyBank项目具有读取SequenceFile的功能,然后只需使用相同的PiggyBank项目中的AvroStorage和适当的Avro方案来获取Avro文件。
如果只有Pig支持从文件加载Avro架构..!如果您使用Pig,您将不幸地必须形成明确包含Avro架构的脚本,这可能有点烦人。