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 ...
随机推荐
- mysql之ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'解决方法
LAMPP安装完成之后,mysql -u root -p连不上,报这个错误: ERROR 2002 (HY000): Can't connect to local MySQL server throu ...
- 关于从SVN检出项目后,项目名称还是之前修改之前或者项目名称不对问题
找到工作空间Workspaces/项目名称/.projet 修改文件中<name>项目名称</name>属性即可
- 【转】js-ES6学习笔记-Symbol
原文:https://www.cnblogs.com/zczhangcui/p/6435652.html https://blog.mgechev.com/2017/09/16/developing- ...
- JavaScript 正则表达式——基本语法(2)
来源:http://www.cnblogs.com/dolphinX/p/3486214.html 定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> ...
- C#基础视频教程5.1 如何编写简单的超级热键
我们上一节介绍了编写简单计算器,实际上也是出于实用角度(这个计算器只要你肯改,肯定能做的比微软自带的计算器好用).这一节介绍做简单的超级热键(所谓的超级热键是指自定义快捷键的功能) 超级热键的最关键一 ...
- java线程同步问题——由腾讯笔试题引发的风波
刚刚wm问我了一道线程的问题,因为自己一直是coder界里的渣渣.所以就须要恶补一下. 2016年4月2号题目例如以下. import java.util.logging.Handler; /** * ...
- CAD设置图层透明显示
在生产制图过程中,图层有利于更好的地理信息的分类,但显示就有些问题了,比如多个面层重叠.通常为了显示多个面重叠区域的特征,我们通常的做法是设置图层填充(符号填充,如地籍处理中经常这样做),或者设置图层 ...
- es5 - array - join
/** * join描述:将数组(或类数组对象)的所有元素连接到一个字符串中并返回此字符串. * join语法:arr .join([ separator]) * join参数:指定用于分隔数组的每对 ...
- ASP.NET操作Oracle知识记录(采用ODP.NET)
最近因为要把以前做的一个项目数据库从MSSQL2005转移到Oracle上,所以开始接触Oracle,通过本篇随笔简单记录一些ASP.NET结合Oralce的操作: 因为微软未来不再支持 System ...
- ant design pro (九)引入外部模块
一.概述 原文地址:https://pro.ant.design/docs/import-cn 除了 antd 组件以及脚手架内置的业务组件,有时我们还需要引入其他外部模块,这里以引入富文本组件 re ...