原文: 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:一个新的数据交换格式的更多相关文章

  1. 数据交换格式与SpringIOC底层实现

    1.数据交换格式 1.1 有哪些数据交换格式 客户端与服务器常用数据交换格式xml.json.html 1.2 数据交换格式应用场景 1.2.1 移动端(安卓.iOS)通讯方式采用http协议+JSO ...

  2. 【学习】006数据交换格式与SpringIOC底层实现

    课程目标 XML和JSON Java反射机制 手写SpringIOC 什么是数据交换格式 客户端与服务器常用数据交换格式xml.json.html 数据交换格式用场景 移动端(安卓.IOS)通讯方式采 ...

  3. 常用两种数据交换格式之XML和JSON的比较

    目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...

  4. JSON——IT技术人员都必须要了解的一种数据交换格式

    JSON作为目前Web主流的数据交换格式,是每个IT技术人员都必须要了解的一种数据交换格式.尤其是在Ajax和REST技术的大行其道的当今,JSON无疑成为了数据交换格式的首选! 今天大家就和猪哥一起 ...

  5. Atitit.常见软件 数据 交换格式 标准

    Atitit.常见软件 数据 交换格式 标准 1. 常见的数据格式txt ,doc ,pic,music ,vodio1 2. 通用格式json yaml phpstr1 3. 专用格式1 4. 用户 ...

  6. 在.NET使用JSON作为数据交换格式

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhoufoxcn.blog.51cto.com/792419/517093 我们 ...

  7. json 数据交换格式与java

    http://wiki.mbalib.com/wiki/数据交换 数据交换是指为了满足不同信息系统之间数据资源的共享需要,依据一定的原则,采取相应的技术,实现不同信息系统之间数据资源共享的过程. 数据 ...

  8. NDEF-NFC数据交换格式

    为实现NFC标签.NFC设备以及NFC设备之间的交互通信,NFC论坛(NFC FROUM)定义了称为NFC数据交换格式(NDEF)的通用数据格式.NDEF是轻量级的紧凑的二进制格式,可带有URL,vC ...

  9. XML和JSON两种数据交换格式的比较

    在web开发领域,主要的数据交换格式有XML和JSON,对于在 Ajax开发中,是选择XML还是JSON,一直存在着争议,个人还是比较倾向于JSON的.一般都输出Json不输出xml,原因就是因为 x ...

随机推荐

  1. Glide Picasso Fresco UIL 图片框架 缓存 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. hdu 1158-Employment Planning,n*n*n

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1158 解题思路就不多说,动态规划. 值得提及的是题目没有给出数据范围,水过的都默认工人数目不超过100 ...

  3. solr入门之參考淘宝搜索提示功能优化拼音加汉字搜索功能

    首先看一下从淘宝输入搜索keyword获取到的一些数据信息: 第一张:使用拼音的全程来查询 能够看到提示的是匹配的转换的拼音的方式,看最后一个提示项 这里另一个在指定分类文件夹下搜索的功能,难道后台还 ...

  4. asp与aspx有什么区别

    asp与aspx哪个好? 最佳答案 你如果想知道哪个好,我想很多人第一个想法就是aspx好. 这很好理解,就像楼上的朋友说的,aspx是asp的升级版. 但是aspx相对于asp的升级可以说是从根本上 ...

  5. leetCode 42.Trapping Rain Water(凹槽的雨水) 解题思路和方法

    Trapping Rain Water Given n non-negative integers representing an elevation map where the width of e ...

  6. Citrix服务器虚拟化之二十九 XenApp 6.5发布服务器上的应用程序

    Citrix服务器虚拟化之二十九  XenApp 6.5发布服务器上的应用程序 XenApp可发布以下类型的资源向用户提供信息访问,这些资源可在服务器或桌面上虚拟化: 1)  服务器桌面:发布场中服务 ...

  7. vue - router 起步

    官方API:https://router.vuejs.org/zh/guide/#javascript vue-cli for index.js export default new Router({ ...

  8. Android 4.4 KitKat 支持 u 盘功能

    Android U 盘功能实现和分析 u 盘功能实现结果: u 盘会当成 usb storage 在 Settings Storage 里面显示. 准备工作 内核需支持 usb host,需支持 FU ...

  9. Spring 基于xml配置方式的事务

    参考前面的声明式事务的例子:http://www.cnblogs.com/caoyc/p/5632198.html 我们做了相应的修改.在dao中和service中的各个类中,去掉所有注解标签.然后为 ...

  10. Swift 与 Object-C 交互 (Swift版本为:1.2)

    这篇文章主要是介绍 Swift 与 Object-C 之间进行交互的代码,主要分为两个部分.一个是 Swift 项目调用 Object-C 的类,另一个是 Object-C 项目调用 Swift 类. ...