我目前正在使用具有可写入的Sequencefile的hadoop mapreduce作业。在系统的非hadoop相关部分也使用相同的可写类型进行序列化。

这种方法很难维护-主要是因为缺乏架构和需要手动处理版本更改。

看来apache avro处理这些问题。

问题是,在迁移期间,我将拥有两种格式的数据。有没有一种简单的方法来处理迁移?

有帮助吗?

解决方案

一般来说,没有什么能阻止您使用Avro数据和序列文件互换。使用无论您需要的数据类型都有所必需的,对于输出,它当然是有意义的,无论只要使用Avro格式。如果您的输入以不同的格式出现,请查看 hourtinputs 。基本上,您仍然必须实施单独的映射器,但考虑到地图输入键/值是不同的。

搬到avro是一个明智的移动。如果您有时间和硬件的容量,它甚至可能是值得明确转换数据从Sechnfile转换为Avro。您可以使用Avro支持的任何语言,也可以恰好支持SequenceFiles进行此操作。 Java肯定是(显然),但猪也非常方便地做到这一点。

用户贡献的piggybank项目具有读取序列文件的功能,然后只需使用相同的Piggybank项目与适当的Avro方案使用AvRoStorage以获取您的Avro文件。

如果只有猪支持从文件加载Avro Schemas ..!如果您使用PIG,您将不幸的是必须形成明确包含AVRO架构的脚本,这可能有点令人讨厌。

其他提示

我自己没有尝试过,但也许使用 AvroSequenceFile 格式会有所帮助。这只是一个包装 SequenceFile 所以从理论上讲,你应该能够写入数据在你的旧 SequenceFile 格式以及您的新 Avro 格式,这应该使迁移更容易。

这里是 更多资料 关于这种格式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top