【问题标题】:Is there a simple way to migrate from SequenceFiles to Avro?有没有一种简单的方法可以从 SequenceFiles 迁移到 Avro?
【发布时间】:2013-11-30 15:05:56
【问题描述】:
我目前正在使用带有可写序列文件的 hadoop mapreduce 作业。
相同的 Writable 类型也用于系统的非 hadoop 相关部分的序列化。
这种方法很难维护 - 主要是因为缺少架构以及需要手动处理版本更改。
看来 apache avro 可以处理这些问题。
问题是,在迁移过程中,我将拥有两种格式的数据。
有没有一种简单的方法来处理迁移?
【问题讨论】:
标签:
hadoop
avro
writable
sequencefile
【解决方案1】:
我自己没有尝试过,但也许使用AvroSequenceFile 格式会有所帮助。它只是SequenceFile 的一个包装器,所以理论上您应该能够以旧的SequenceFile 格式和新的Avro 格式写入数据,这应该会使迁移更容易。
这里是more information关于这种格式。
【解决方案2】:
通常,没有什么可以阻止您互换使用 Avro 数据和 SequenceFiles。使用所需的数据类型所需的任何 InputFormat,对于输出,在实际情况下使用 Avro 格式当然是有意义的。如果您的输入有不同的格式,请查看MultipleInputs。本质上,您仍然需要实现单独的 Mappers,但考虑到 Map 输入键/值不同,这是可以预料的。
搬到 Avro 是明智之举。如果您有足够的时间和硬件能力,甚至可以立即将您的数据从 SequenceFile 显式转换为 Avro。您可以使用 Avro 支持的任何语言,它也恰好支持 SequenceFiles 来执行此操作。 Java 肯定会(很明显),但 Pig 也非常方便地执行此操作。
用户贡献的 PiggyBank 项目具有读取 SequenceFile 的功能,然后只需使用来自同一个 PiggyBank 项目的 AvroStorage 和适当的 Avro 方案来获取您的 Avro 文件。
如果只有 Pig 支持从文件加载 Avro 模式..!如果您使用 Pig,您将不得不编写显式包含 Avro 模式的脚本,这可能有点烦人。