链接
Apache Avro: a New Format for Data Interchange
Apache Avro™ 1.8.2 Getting Started (Java)
Apache Avro™ 1.8.2 Specification
用于交换大数据的序列化项目
- Protocol Buffers 基于定义好的数据结构生成代码后组装数据,同时使用注解解决定义与数据不一致的情况,导致数据量变大,解析困难;
- Thrift FIXME
- avro 支持生成代码的方式,也提供一种通用的方式处理数据,使用模式进行匹配,数据缺失使用默认值,数据不匹配则忽略。
avro特性
- 生成代码方式或通用方式
- 兼容性(schema 上定义规则)
When an application expects fields that are not present, Avro provides a default value, specified in the schema. Avro ignores unexpected values that are present in data
- schema定义数据格式,json方式
- avro为了便于MapReduce的处理定义了一种容器文件格式(Container File Format)
- avro可应用在RPC框架上
- avro可排序 FIXME
- avro在Hadoop生态系统中应用,扩展整个生态系统,使得支持版本兼容,编程语言兼容;
schema类型
根据工具+schema生成代码实体
java -jar avro-tools-1.8.2.jar compile schema schema.avsc java .
schema.avsc为schema文件,最后生成的代码在当前目录
avro-toos-1.8.2.jar下载地址
java实现
maven坐标
1 | <dependency> |
序列化(生成实例类方式)
1 | // 使用泛型方式,T类型为生成的实体 |
反序列化(生成实例类方式)
1 | public static <T> T deserialize(byte[] data, T initInstance, Class<T> tClass) { |
序列化(通用方式)
1 | public static byte[] genericSerialize(String schemaStr, GenericRecord record) { |
反序列化(通用方式:获取数据后需要自己解析数据内容)
1 | public static GenericRecord genericDeserialize(byte[] data, String schemaStr) { |