Apache Avro:一个新的数据交换格式
原文: http://blog.cloudera.com/blog/2009/11/avro-a-new-format-for-data-interchange/
注:由于个人英语能力有限,翻译不准确,请指出。英语好,如有意愿一起翻译一些博客,请加qq 583368684
Apache Avro 最近加入了Hadoop项目的大家庭。Avro定义了一个数据格式,从设计上支持数据密集型应用,并且为多编程语言提供该格式支持。
背景
我们希望数据驱动的应用是动态。人们应该能够快速组合来自不同数据源的数据集。我们希望促进数据的新颖和创新探索。理想情况下,不需要大量的准备工作,人们应该能够容易地将销售点交易。网站访问和外部提供的人口统计数据相关联。这是可能的,使用脚本或者交互式工具。
当前的数据格式往往不是很好用。XML 和 JSON都有很强的表达性,但是他们太大了并且处理比较慢。当处理PB级别的数据,大小和速度很重要。
谷歌用Protocol Buffers 来解决(也有一些类似的系统,如Thrift)。谷歌已经将Protocol Buffers 开源,但是它不是我们理想的解决方案。
通用数据
使用Protocol Buffers,可以定义数据结构,然后生成可以有效读取和写入他们的代码。但是,如果希望脚本语言用Protocol Buffers快速实现一个实验,首先必须:获取数据结构定义;然后生成对应的代码;最后得到数据前要获取代码。这可能不是那么糟糕,但是如果希望要一个通用的工具,能够留言所有的数据集合,它将不得不获取每个数据集的数据结构定义,然后生成代码和获取代码为每个数据集。这把本来应该简单的事情变复杂了。
Avro的数据格式总是以易于处理的形式存储数据结构与数据。Avro可以在运行时使用这些定义以通用的方式向应用程序呈现数据,而不是需要代码生成。
代码生成在Avro中是可选的。它在一些编程语言有时使用特定的数据结构,对应于经常序列化的数据类型是非常好用的。但是在像Pig和Hive这样的脚本系统中,代码生成将是一种负担,所以Avro不需要它。
存储全部的数据结构定义和数据的另外一个优势是允许数据被更快更简洁的写入。Protocol Buffere 为数据添加注解,因此即使定义和数据不完全匹配,数据仍有可能被处理。然而这些注释使得数据更大和更慢的被处理。Avro不需要这些注释,使得Avro数据比其他序列化系统更小和更快地处理。
Avro Schemas
Avro 用JSON来定义数据结构的schema.例如一个二位点可以被定义为Avro record:
{
"type": "record", "name": "Point",
"fields":
[
{"name": "x", "type": "int"},
{"name": "y", "type": "int"},
]
}
每个实例被序列化为两个整数,没有额外的记录和注释。整数使用可变长度的zig-zag 编码写入。因此,小的负数和整数能够被写仅仅需要两个字节,100个点仅仅需要200个字节。
除了Record和数字类型,Avro还支持数组、map、枚举、可变和固定长度的二进制字节数据和字符串。它还能定义一个容器文件格式,为了能够为MapReduce和其他计算框架提供支持。详细内容,请查看Avro文档。
兼容性
应用的发展,随着他们的发展,数据结构可能发生变化。我们希望新版本的应用程序仍然能够处理旧版本创建的数据,反之亦然。Avro与Protocol Buffers 相同的方式处理这个问题。当应用程序不需要不存在的字段时,Avro提供一个指定的默认值,Avro忽略不需要但存在的数据。这不能处理所有的向后兼容问题。但它能非常容易的处理最常见的问题。
Avro也定义远程过程调用协议(RPC).虽然在RPC中使用的数据类型和数据集中的数据类型不同,但是使用通用序列化系统仍然有用。数据密集型应用程序需要基于分布式RPC框架。所以我需要能够处理数据集文件,也希望能够用RPC。因此在公共基础上构建这些,使得能够编写处理数据的代码,但不能使用分布式框架来做的几率大大降低。
和Hadoop的集成
我们希望在Hadoop的MapReduce中容易使用Avro数据。这仍然是一个正在进行中的工作。问题MAPREDUCE-1126和MAPREDUCE-815跟踪这个
注意,Avro数据结构可以指定他们的排序顺序,因此可以在一中编程语言中创建复杂的数据,然后可以用另外一中语言排序。没有反序列化的排序也是有可能的,因此相当快。
我们希望Avro将取代Hadoop现有的RPC.Hadoop目前需要其客户端和服务器运行完全相同的版本。我们希望Avro允许一个,列表一个单一的Hadoop应用程序,可以和运行不同版本的HDFS和MapReduce集群通信。
最后我们希望Avro允许Hadoop应用程序更容易使用Java以外的语言编写。例如,一旦基于Avro,我们希望用像Python/C/C++支持原生的MapReduce和HDFS.
Apache Avro:一个新的数据交换格式的更多相关文章
- 数据交换格式与SpringIOC底层实现
1.数据交换格式 1.1 有哪些数据交换格式 客户端与服务器常用数据交换格式xml.json.html 1.2 数据交换格式应用场景 1.2.1 移动端(安卓.iOS)通讯方式采用http协议+JSO ...
- 【学习】006数据交换格式与SpringIOC底层实现
课程目标 XML和JSON Java反射机制 手写SpringIOC 什么是数据交换格式 客户端与服务器常用数据交换格式xml.json.html 数据交换格式用场景 移动端(安卓.IOS)通讯方式采 ...
- 常用两种数据交换格式之XML和JSON的比较
目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...
- JSON——IT技术人员都必须要了解的一种数据交换格式
JSON作为目前Web主流的数据交换格式,是每个IT技术人员都必须要了解的一种数据交换格式.尤其是在Ajax和REST技术的大行其道的当今,JSON无疑成为了数据交换格式的首选! 今天大家就和猪哥一起 ...
- Atitit.常见软件 数据 交换格式 标准
Atitit.常见软件 数据 交换格式 标准 1. 常见的数据格式txt ,doc ,pic,music ,vodio1 2. 通用格式json yaml phpstr1 3. 专用格式1 4. 用户 ...
- 在.NET使用JSON作为数据交换格式
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhoufoxcn.blog.51cto.com/792419/517093 我们 ...
- json 数据交换格式与java
http://wiki.mbalib.com/wiki/数据交换 数据交换是指为了满足不同信息系统之间数据资源的共享需要,依据一定的原则,采取相应的技术,实现不同信息系统之间数据资源共享的过程. 数据 ...
- NDEF-NFC数据交换格式
为实现NFC标签.NFC设备以及NFC设备之间的交互通信,NFC论坛(NFC FROUM)定义了称为NFC数据交换格式(NDEF)的通用数据格式.NDEF是轻量级的紧凑的二进制格式,可带有URL,vC ...
- XML和JSON两种数据交换格式的比较
在web开发领域,主要的数据交换格式有XML和JSON,对于在 Ajax开发中,是选择XML还是JSON,一直存在着争议,个人还是比较倾向于JSON的.一般都输出Json不输出xml,原因就是因为 x ...
随机推荐
- [Python爬虫] 之三十一:Selenium +phantomjs 利用 pyquery抓取消费主张信息
一.介绍 本例子用Selenium +phantomjs爬取央视栏目(http://search.cctv.com/search.php?qtext=消费主张&type=video)的信息(标 ...
- 数组根据index拆分和查询下标
private class ArrayTool<T> { /// <summary>查询值在数组中的下标</summary> /// <param name= ...
- C#应用视频教程3.2 Halcon软件测试
Halcon是图像处理比较牛逼的一个软件(德国人的东西,做的非常强大,里面集成的算法很多,可能你一辈子研究这个也做不过他),然而牛逼归牛逼,康耐视,基恩士也很牛逼,但是日本人的东西一般太过封闭,屌丝用 ...
- jtemplate 为javascript前端html模版引擎
最近的项目中用到了jtemplate, 它是客户端基于javascript的模板引擎,绑定的数据为json对象.以前我在页面上显示数据列表时最喜欢用Repeater控件了,因为它相对与其它几个服务端控 ...
- 手机网站调试神器之chrome控制台
现在真是一个信息化的时代,每个人手里都拿着一款智能机,上班下班走路坐车之余都会玩玩手机,上上网.于是作为广大网站媒体来说,争抢手机市场无疑是刻不容缓.对于我们Web前端工程师来说,了解并掌握手机编程的 ...
- UVA 10652 Board Wrapping 计算几何
多边形凸包.. .. Board Wrapping Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu ...
- Event sender
Sometimes it is convenient to know which widget is the sender of a signal. For this, PyQt4 has these ...
- Ajv JSON数据格式校验 使用
1.官网 https://ajv.js.org/ 2.示例代码 <!DOCTYPE html> <html lang="zh"> <head> ...
- Apache Ant和Apache Maven的区别
Apache Ant和Apache Maven的区别 分类: ANT Maven 2013-12-10 18:47 1477人阅读 评论(26) 收藏 举报 ———摘自<maven权威指南> ...
- 重要:Linux下IDE--KDevelop (用来跟踪调试C++) Ubuntu下QT4开发环境的搭建及初体验
Linux下安装Qt4有两大问题,一是环境变量,二是IDE(集成开发环境).安装Qt4也有两种方法,一种是apt-get,一种是下载源码包,而后 一种方法已经人证实是最有可能不好使的方法.所以我最终采 ...