Apache Avro
简介
Avro是Hadoop的一个数据序列化系统;
由Hadoop的创始人Doug Cutting(也是Lucene,Nutch等项目的创始人)开发,
设计用于支持大批量数据交换的应用。
基于scheme的序列化;
支持二进制和json两种编码方式;
支持多种语言;
Avro数据以模式来读和写(文件或是网络),并且写入的数据都不需要加入其它标识,这样序列化时速度快且结果内容少;
可排序。一种语言支持的Avro程序在序列化数据后,可由其它语言的Avro程序对未反序列化的数据排序。
主要特点
- 支持二进制序列化方式,可以便捷,快速地处理大量数据;
- 动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据
与protobuf区别
Property | avro | thrift/protobuf |
---|---|---|
Dynamic schema | 是的 | 不 |
Built into Hadoop | 是的 | 不 |
Schema in JSON | 是的 | 不 |
No need to compile | 是的 | 不 |
No need to declare IDs | 是的 | 不 |
Bleeding edge | 是的 | 不 |
Avro为了便于MapReduce的处理定义了一种容器文件格式(Container File Format)。
- 文件中只能有一种模式,所有需要存入这个文件的对象都需要按照这种模式以二进制编码的形式写入。
- 对象在文件中以块(Block)来组织,并且这些对象都是可以被压缩的。
- 块和块之间会存在同步标记符(Synchronization Marker),以便MapReduce方便地切割文件用于处理。
下图是根据文档描述画出的文件结构图(将Avro对象序列化到文件的操作):