Avro 简介
来源:互联网 发布:人工智能对战星际争霸 编辑:程序博客网 时间:2024/05/17 09:45
Avro 简介
ApacheAvro(http:llavro.apache.org)是一个独立于编程语言的数据序列化系统。该项目是由Doug Cutting(Hadoop之父)创建的,旨在解决Hadoop中Writable类型的不足:缺乏语言的可移植性。拥有一个可被多种语言(当前是C, C++, Java,Python和Ruby)处理的数据格式与绑定到单一语言的数据格式相比,前者更易于与公众共享数据集。允许其他编程语言能够读写数据,该类数据格式进行读写操作,会使其具有更好的特性。
Avro规范((http: //avro. apache. org/dots/current/spec. html)精确定义所有实现都必须支持的二进制格式。同时它还指定这些实现还需要支持其他Avro特性。但是,该规范并没有给API制定规范:实现可以根据自己的需求操作Avro数据并给出相应的API,因为每个API都与语言相关。事实上,只有一种二进制格式比较重要,这表明绑定一种新的编程语言来实现是比较容易的,可以避免语言和格式组合爆炸问题,·否则将对互操作性造成一定的问题。Avro有丰富的数据模式解析(data schema resolution)能力。在精心定义的约束条件下,读数据所用的模式不必与写数据所用的模式相同。由此,Avro是支持模式演化的。例如,通过在用于读取以前数据的模式中声明新的用于读取记录的选项字段。新的和以前客户端均能以相似的方法读取按旧模式存储的数据,同时新的客户端可以使用新的字段写入的新内容。相反的,如果老客户端读取新客户端写入的数据,它将忽略新加入的字段并按照先前的数据模式进行处理。Avro为一系列对象指定一个对象容器格式—类似于Hadoop的顺序文件。Avro数据文件包含元数据项,模式数据存储在其中,这使文件可以自我声明。Avro数据文件支持压缩,并且是可切分的,这对MapReduc。的输入格式至关重要。另外,Avro本身是为MapReduce设计的,所以在不久的将来有可能使用Avro作为一流的MapReduce API(即,比Streaming更丰富的API,就像Java API或C++管道一样)融入其他编程语言。
Avro数据类型和模式
Avro 定义了少数数据类型,它们可用于以写模式的方式来构建应用特定的数据结考虑到互操作性,其实现必须支持所有的Avro类型。
每个基本类型还可以使用更冗长的形式和使用type属性来指定,示例如下:{"type":"null"}
avro基本类型
类型名称
描述
模式示例
null
空值
"null"
Boolean
二进制值
"boolean"
int
32位带符号整数
“int"
long
64位带符号整数
"long"
于load
单精度(32位)IEEE754浮点数
“于loat"
double
双精度(64位)IEEE754浮点数
"double"
bytes
8位无符号字节序列
“bytes"
string
Unicode字符序列
“string"
Avro的复杂类型
类型名称
描述
模式实例
array
一个排过序的对象集合。特定数组中的所有对象必须模式相同
{"array":"long"}
map
未排过序的键/值对。键必须是字符串,值可以是任何类型,但一个特定map中所有值必须模式相同
{"type":"map",
"values":"string"
}
record
任意类型的一个命名字段集合
{
"type":”record",
"name":"WeatherRecord"
"doc":"A weather reding.",
"fields":[
{"name":"yes","type":"int"}
{"name":"temperature","type":"int"}
{"name":"stationId","type":"string"}
]}
enum
一个命名的值集合
{
"type":"enum",
"name":"Cutlery",
"doc":"An eating utensil。”,
"symbols”:["KNIFE",FORK","SPOON"]
}
fixed
一组固定数量的8位无符号字节
{"type":"fixed",
"name":"MdSHash"
}
union
模式的并集。并集可以用json数组表示,其中每个元素为一个模式口并集表示的数据必须与其其中一个模式相匹配
[
"null",
"string",
{"type":"map","values":"string"}
]
Java拥有第三类映射,即自反映射(reflectmapping,将avro类型映射成事先已有的Java类)。它的速度比通用映射和特殊映射都慢,所以不推荐在新应用中使用。
Avro的java映射类型
avro类型
Java通用映射
Java特殊映射
Java自反映射
null
null类型
boolear
Boolean
int
Int
short或int
long
long
float
float
double
double
bytes
java.nio.bytebuffer
字节数组
string
org.apache.
avro.util/utf8
array
org.apache.
avro.util/ut于8
array或Java.util/Collection
map
java.util/map
java.lang.String
record
org.apache.avro.
generic.genericrecord
生成实现org.apache.avro.
specific/SpecificRecord的类
具有零参数构造函数的任意用户类。
继承了所有不传递的实例字段
enum
java.lang.string
生成java enum类型
任意java enum类型
fixed
org.apache.avro.
generic/genericfixed
生成实现org.apache.avro.
specific.SpecificFixed的类
org.apache.avro
.generic.genericFixed
union
Java.lang.object
- Avro简介
- Avro 简介
- Avro简介
- Avro简介
- Avro简介
- Avro简介
- Avro简介
- avro简介
- Avro简介
- Apache Avro简介
- Apache Avro项目简介
- Apache Avro简介
- Apache Avro简介与操作
- avro
- avro
- AVRO
- Avro
- avro
- php中session过期时间设置
- 陀螺仪和加速度计
- 防止程序启动2次
- asp response.Write
- ThinkPHP模块分组
- Avro 简介
- 分包压缩包的解压方法
- Linux系统的Cache工作原理和管理机制
- Java程序员面试中的多线程问题
- LwIP 协议栈源码详解 ——TCP/IP 协议的实现(十:ARP 层流程)
- 文件下载问题
- C# 输入三条边,判断是否组成三角形
- 线程的暂停、恢复和终止
- svn : Item is out of date 解决办法