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 ...
随机推荐
- C#中的数组【转】
目录 数组的声明 数组的初始化 数组的访问 数组的常用属性和方法 为方便起见,以下数组均定义为整型 数组的声明 C#声明数组时,方括号[]必须跟在类型后面,而不是标识符后面 1. 声明一维数组 C#数 ...
- 进度对话框 ProgressDialog 用法总结
ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog ); dialog.setButton(DialogInterface.BUTTO ...
- JAVA反射使用手记
本篇文章为在工作中使用JAVA反射的经验总结,也可以说是一些小技巧,以后学会新的小技巧,会不断更新.本文不准备讨论JAVA反射的机制,网上有很多,大家随便google一下就可以了. 在开始之前,我先定 ...
- Node.js:常用工具、路由
一.常用工具util util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. 1.util.inherits util.inherit ...
- Hive配置与操作实践
Hive配置与操作实践 @(Hadoop) 安装hive hive的安装十分简单,只需要在一台服务器上部署即可. 上传hive安装包,解压缩,将其配入环境变量. mysql的设置 在要作为元数据库的m ...
- java中构建同时兼容linux和windows程序时遇到的文件路径分割符问题解决方案
最近在做一个自动上传文件的客户端,因为 file.getAbsolutePath() 在Mac和linux下的分割符是“/”,而在windows操作系统下的分割符则是“\”,我们程序中固然可以通过调 ...
- Wifidog及认证过程初分析
Wifidog初分析 一.综述 wifidog是搭建无线热点认证系统的解决方案之一,他比nocat.nodog更适合互联网营销思路.常见的使用在openwrt系统上,它实现了路由器和认证服务器的数据交 ...
- Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能
首先推荐一下鸿洋大大的打造个性的图片预览与多点触控视频教程,这套教程教我们一步一步实现了多点触控实现对图片的平移和缩放的功能.这篇文章我将在鸿洋大大的基础之上做了一些扩展功能: 1.图片的惯性滑动 2 ...
- Linux环境下GNU, GCC, G++编译器(转)
一,GNU GNU是“GNU 's Not Unix”的递归缩写, Stallman宣布GNU应当发音为Guh-NOO(革奴)以避免与new这个单词混淆(注:Gnu在英文中原意为非洲牛羚,发音与new ...
- 微信小程序列表加载更多
概述 基于小程序开发的列表加载更多例子. 详细 代码下载:http://www.demodashi.com/demo/13632.html 一.前言 基于小程序开发的列表加载更多例子. 二.运行效果 ...