Avro (一)基本类型与模式

原创
2017/03/28 23:51
阅读数 540

Avro 相关概念分析

 Avro (Apache Avro) 是一个独立于编程语言的数据序列化系统. 

Avro由Hadoop之父 Doug Cutting创建发起,旨在解决Hadoop中 Writable 类型缺乏语言的可移植性的不足,使其更容易与除java之外的语言共享数据集. Avro数据使用与编程语言无关的模式定义,且其的代码生成时可选的,也就是说Avro可以对任意指定模式的数据进行读写,即使是其从未见过的数据模式.在Avro里模式通常用json来定义,数据通常采用二进制格式(也可以用JSON或其它格式)编码,并且Avro还为熟悉类c语言的开发人员提供的一种高级语言 Avro IDL 来写模式.Avro 规范明确定义所有的实现都必须支持二进制格式,同时还需要支持其它的Avro特性. Avro有丰富的模式解析能力(schema resolution)能力,如果约束条件定义的足够明细,读数据所使用的模式也无需与写数据所使用的模式相同.Avro还支持数据演化,例如:如果需要将一个新字段加入到已存在的记录中,只需要在以前存在的读取数据的模式中声明这个新字段的信息.新的数据读取的客户端与老客户端非常相似,新客户端依旧能够读取老客户端的数据,同时新客户端可以使用新字段写入新内容.而如果老客户端读取新客户端写入的数据,会忽略新加入的字段并按照之前的数据模式对新数据进行处理, Avro为一系列对象指定了一个类似于Hadoop顺序文件的对象容器格式.Avro数据文件包含元数据项(模式数据存储在其中),因此文件可以自我声明.Avro支持压缩且可进行拆分.avro也可以用于rpc,在客户机与服务器进行握手通信时,就开始同步客户机与服务器的Avro模式(这点已经被优化过,在大部分的通信场景中avro模式不需要真正的作为数据在网络上进行传输).等到同步操作完成之后,客户机与服务器都会相互持有对方的完整模式,这样如果数据中包含未知字段就能轻易的被解析. 综上所述,Avro可以提供:

  • 丰富的数据结构(rich data structures)
  • 持久化存储数据的容器
  • RPC 远程过程调用
  • 轻量级动态语言的集成,可选的代码生成

Avro 数据类型与模式

Avro 定义了少量的基本数据类型,它们可以用于以写模式的方式来构建应用特定的数据结构.基本类型模式示例如下图:

Avro 基本类型

同时Avro也提供了一些复杂类型,模式示例如下:

Avro 复杂类型

Avro 为多种编程语言提供API,API中包含了该语言特定的Avro类型表示,而且一种语言可能有多种表示或映射.所有的语言都支持动态映射,即使运行前不知道具体模式,也可以使用动态映射.在javaAPI中称这种动态映射为"通用"(generic)映射. 另外,java和C++实现可以自动生成代码来表示符合某种Avro模式的数据,java中称这种映射为特殊映射.代码生成能优化数据处理,如果读写数据之前就有一个模式的备份,那么为用户代码生成的类远远要比为通用代码生成的效率要高. java拥有第三种映射,自反映射(reflect mapping,将Avro类型映射到已有的java类型上).它的速度比通用映射和特殊映射都慢,故而不推荐使用.

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部