整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

4.4Avro

hadoop 花牛 7℃ 0评论

Apache Avro(http://avro.apache.org/)是一个独立于编程语言的数据序列化系统。该项目由Doug Cutting(Hadoop之父)创建,旨在解决Hadoop中 Writable类型的不足:缺乏语言的可移植性。拥有一个可被多种语言(当前是CC++、C#、JavaPHPPythonRuby)处理的数据格式与绑定到单一语言的数据格式相比,前者更易于与公众共享数据集。Avro同时也更具生命力,该语言将使得数据具有更长的生命周期,即使原先用于读/写该数据的语言已经不再使用。

但为什么要有一个新的数据序列化系统?与Apache Thrift和Google的Protocol Buffers相比,Avro有其独有的特性。与前述系统及其他系统相似,Avro数据是用语言无关的模式定义的。但与其他系统不同的是,在Avro中,代码生成是可选的,这意味着你可以对遵循指定模式的数据进行读/写操作,即使在此之前代码从来没有见过这个特殊的数据模式。为此,Avro假设数据模式总是存在的(在读/写数据时)形成的是非常精简的编码,因为编码后的数值不需要用字段标识符来打标签。

Avro模式通常用JSON来写,数据通常采用二进制格式来编码,但也有其他选择。还有一种高级语言称为Avro IDL,可以使用开发人员更熟悉的类 C语言来写模式。还有一个基于JSON的数据编码方式(对构建原型和调试Avro数据很有用,因为它是我们人类可读的)。

Avro 规范(http://avro.apache.org/docs/current/spec.html)精确定义所有实现都必须支持的二进制格式。同时它还指定这些实现还需要支持的其他Avro特性。但是,该规范并没有给API制定规范:实现可以根据自己的需求操作Avro数据并给出相应的API,因为每个API都与语言相关。事实上,只有一种二进制格式比较重要,这表明绑定一种新的编程语言来实现是比较容易的,可以避免语言和格式组合爆炸问题(否则将对互操作性造成一定的问题)。

Avro有丰富的模式解析(schema resolution)能力。在精心定义的约束条件下,读数据所用的模式不必与写数据所用的模式相同。由此Avro是支持模式演化的。例如,如果有一个新的、可选择的字段要加入一个记录中,那么需要在用于读取老数据的模式中声明它即可。新客户端和以前的客户端非常相似,均能读取按旧模式存储的数据,同时新的客户端可以使用新字段写入的新内容。相反,如果老客户端读取新客户端写入的数据,会忽略新加入的字段并按照先前的数据模式处理。

Avro为一系列对象指定了一个对象容器格式——类似于Hadoop的顺序文件。 Avro数据文件包含元数据项(模式数据存储在其中),使此文件可以自我声明。Avro数据文件支持压缩,并且是可切分的,这对MapReduce的输入格式至关重要。另外,Avro本身是为MapReduce设计的,所以在不久的将来可能使Avro用于顶层的MapReduce API(即,比Streaming更丰富的API,就像Java API或C++管道一样)像使用其他编程语言一样使用。

Avro还可以用于RPC,但这里不进行详细说明。详情参见规范文档。

转载请注明:全栈大数据 » 4.4Avro

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址