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
|
|
|
分享到:
相关推荐
Apache Avro是Hadoop生态系统中的一个关键组件,它是一个数据序列化系统,旨在提供高效的、易于使用的数据交换格式。Avro的数据模型与JSON类似,但更加强大且适合大规模数据处理。它的设计目标是简化分布式应用程序...
文章目录简介特点Avro数据类型和模式Avro基本类型Avro复杂类型Avro数据序列化/反序列化方法1 使用编译的方式序列化反序列化方法2 不使用编译的方式序列化反序列化 简介 Avro是Hadoop中的一个子项目,也是Apache...
1. **Avro简介** Avro是由Apache基金会开发的一种数据序列化系统,主要用于解决分布式系统中的数据交换问题。它定义了一种紧凑、高效的二进制数据格式,支持动态类型,使得数据可以在不同的系统间轻松传输。 2. **...
**Avro RPC简介** Avro是Hadoop生态系统中的一个关键组件,由Apache软件基金会开发,主要用作数据序列化系统。它提供了一种高效的、语言无关的、版本化的数据序列化机制,使得不同编程语言之间可以方便地交换数据。...
#### 二、Avro简介及其在RPC中的应用 **Avro**是一个强大的数据序列化框架,最初由Apache Hadoop项目开发。它不仅支持动态语言,还提供了丰富的数据结构和高效的二进制数据格式。Avro在RPC中主要负责数据的序列化与...
1. **Avro简介** Avro是一种JSON-based的数据序列化格式,支持动态模式,使得在不预先知道数据结构的情况下也能进行数据交换。它的主要特点包括: - 紧凑:Avro的数据格式非常紧凑,适合网络传输和存储。 - 动态...
#### 一、Apache Avro简介 Apache Avro是一种先进的数据序列化系统,其主要设计目的是为了满足大规模数据处理需求中的数据交换与存储需求。Avro不仅支持丰富的数据结构,还具备动态类型的特点,这使得它非常适合于...
“ avro-rpc-demo”是Java实现的avro rpc的演示代码。 作者:zhexin Pan日期:20151103 简介此项目包括Java中的三个实现演示。 第一个是官方网站的快速入门演示,它是数据序列化和反序列化的两种实现,分别称为...
二、Avro4s简介 Avro4s是专门为Scala设计的一个Avro库,它极大地简化了在Scala中使用Avro的过程。Avro4s提供了强大的代码生成功能,可以自动生成Avro模式对应的Scala类,同时也提供了简洁的API进行序列化和反序列化...
一、Avro与Schema Registry简介 Avro是Hadoop生态系统的一部分,它提供了一种高效的二进制数据序列化格式,同时支持动态类型,使得数据能够在不同系统间无缝传输。Avro的数据模式(Schema)定义了数据的结构,每个...
一、Dubbox与Spring Boot简介 1. Dubbo:由阿里巴巴开源的高性能RPC框架,提供服务注册、发现、调用、负载均衡等全面服务治理功能。Dubbox是Dubbo的升级版,增加了对RESTful API的支持和更多的扩展性。 2. Spring ...
一、CSV、TSV、JSON、AVRO和Parquet简介 1. CSV(Comma Separated Values):一种通用的文本文件格式,用于存储表格数据,如电子表格或数据库,便于读取和写入。 2. TSV(Tab Separated Values):与CSV类似,但...
#### 一、Avro:数据序列化系统 **知识点概述**: Apache Avro 是一种数据序列化系统,主要用于处理结构化的数据格式,支持丰富的数据结构,提供紧凑高效的二进制数据格式,具备容器文件用于持久化存储数据,以及...
Avro详解17. Chukwa详解18. Hadoop的常用插件与开发19. Hadoop在yahoo的应用附录A: 云计算在线监测平台附录B: Hadoop安装、运行、使用说明附录C:使用DistributedCache的MapReduce程序附录D:使用ChainMapper和...
Avro详解17. Chukwa详解18. Hadoop的常用插件与开发19. Hadoop在yahoo的应用附录A: 云计算在线监测平台附录B: Hadoop安装、运行、使用说明附录C:使用DistributedCache的MapReduce程序附录D:使用ChainMapper和...
### Flume 简介 Flume 主要由三个核心组件构成: 1. **Sources**:数据的来源,例如 log4j 日志生成器、Web 服务器的访问日志等。 2. **Sinks**:数据的去向,通常是数据存储系统,如 HDFS、HBase 或 Kafka。 3. **...
#### 一、Flume与Kafka简介 - **Flume**:Flume是一款高可靠、高性能的日志采集、聚合和传输系统,支持在日志系统中定制各类数据发送方无缝地接入。 - **Kafka**:Kafka是一个分布式流处理平台,它被设计用于构建...
#### 一、Flume简介 Apache Flume 是一个分布式的、可靠的、高可用的服务,用于有效地收集、聚合和移动大量日志数据。Flume 支持简单灵活的配置,这使得它可以适用于各种场景中的数据收集需求。它主要应用于大数据...
Flume 提供了多种类型的Source,如Avro Source、Spooling Directory Source、NetCat Source等。对于已存在的日志文件,可以直接使用如Exec Source(通过Linux命令如`tail -F`)或Spooling Directory Source(监视...
145_导入avro maven-avro-client 146_导入avro maven-avro-client 147_使用hbasesink收集日志到hbase数据库 148_内存通道配置6 U/ X5 L3 ]7 b6 `5 x 149_source的通道选择器-复制策略-multiplexing 150_source的数据...