Avro 简介

ApacheAvro(http:llavro.apache.org)是一个独立于

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 java_Avro 简介 | 学步园相关推荐

  1. glade java_Gtk+/Glade编程(一)--简介 | 学步园

    By unanao 本文是我学习GTK+和glade3进行图形界面编程的一点学习心得的整理,主要是使用GTK+/Glade编程的文档较少,而且没有说名如何将二者联系起来,以及二者之间的关系.本文通过比 ...

  2. oracle的cte,oracle CTE 简介 | 学步园

    oracle 9i r2中引入了SQL-99中的with子句,它是一个实现子查询的工具, 我们可以用它来临时存储oracle经过计算得到的结果集. with子句的作用有点类似global tempor ...

  3. serverlet 原理_Serverlet简介 | 学步园

    .首先,什么是Servlet? Servlet是一个Java编写的程序,此程序是在服务器端运行的,是按照Servlet规范编写的一个Java类. 2.Servlet是做什么的? Servlet是处理客 ...

  4. biee mysql_【Oracle BIEE学习笔记一】Oracle BIEE简介 | 学步园

    一.Oracle BIEE架构 两大任务: 1.解释逻辑SQL查询和对适当的数据源写入相应的物理查询: 2.对物理结果集进行变换和组合,并执行最终计算. 二.Oracle BI资料库中的三层结构 1. ...

  5. netmiko 记录日志_Pythonnetmiko模块的使用 | 学步园

    一.简介 此模块用于简化paramiko与网络设备之间的ssh连接,可在windows与Unix平台使用 二.目前支持的设备 (2019.03.07) Regularly tested Arista ...

  6. layui上传图片列表展示_layui怎么做图片在列表中显示 | 学步园

    layui table中显示图片的方法: 图片需要用到模板.templet: 注意div不可省略,48px指的是div的高度,如果要决定img图片的高度,需要单独设计style ',style:'he ...

  7. java调用存储过程sqlserver_Java调用SqlServer存储过程怎么实现 | 学步园

    在使用Java开发时,经常会遇到调用SqlServer存储过程的问题.下面学步园小编来讲解下Java调用SqlServer存储过程怎么实现? Java调用SqlServer存储过程怎么实现 1.数据库 ...

  8. mysql 异常关机后 无法查数据_MySQL数据库非法关机造成数据表损坏怎么排查 | 学步园...

    该篇文章我们介绍由于非法硬件关机,造成了MySQL数据库的数据表损坏,数据库不能正常运行的一个实例.下面学步园小编来讲解下MySQL数据库非法关机造成数据表损坏怎么排查? MySQL数据库非法关机造成 ...

  9. mysql超长sql查询_超长SQL怎么查询?MySQL列长度限制有哪些 | 学步园

    MySQL字符串的限制长度看似重要性不要,其实和整个MySQL数据库的安全性是息息相关的,很值得我们去深入研究分析.SQL注入攻击一直都在被广泛的讨论,然而人们却忽略了今天我将要介绍的这两个安全隐患, ...

最新文章

  1. 进阶学习(4.3) JVM 垃圾回收算法
  2. Excel 自动更正选项
  3. 线性时变系统能用模型预测控制吗_线性系统理论(二)运动分析
  4. 一步步实现SDDC-Edge负载均衡
  5. c mysql 返回自增id_mysql返回自增id
  6. android路上的点点滴滴
  7. java app的强制更新吗_java – Spring JPA / Hibernate事务强制插入而不是更新
  8. 【直播预告】“CCF-NLP走进高校”系列之“走进郑州大学”
  9. SQL 2000质疑修复
  10. c/s架构的ERP系统对接开票接口
  11. WordPress优化攻略:全面提升WP网站速度仅需3个加速方法和1个插件
  12. GPRS网络继电器(网络开关)介绍
  13. 孤独的根号三 (Missing NUMBER)
  14. ballerina 学习 三十二 编写安全的程序
  15. 小福利,教大家用excel函数实现切片器的功能
  16. 查看计算机ip地址配置信息的命令是,查看电脑配置指令大全
  17. 【python】装饰模式
  18. mix2s适配鸿蒙,小米MIX2S|MIUI10|9.05.12|GPU调节|CPU调节_最新最全的小米MIX 2SROM刷机包下载、刷机...
  19. 从机器学习到大模型(零基础)
  20. 新版谷歌眼镜专利曝光:终于像普通眼镜了

热门文章

  1. Html5的页面基本结构标签片段,HTML5基本网页结构以及标签的改变
  2. 海康MSN理财大学论坛--兼职必看的全行业薪酬对照表
  3. uno牌的玩法图解_介绍一下uno牌地常见玩法
  4. 智慧武汉地理信息大数据中心上线 比百度地图更全
  5. 电磁波在地球物理勘探中的应用
  6. OI退役记,第四部分,2017省选季(下)
  7. STC8系列固件函数库开源
  8. 软件架构设计杂记: 分层架构 与 PO、VO、DTO、BO、POJO、BO/DO、DAO
  9. PD3.0详解 第十章 策略层 电源协商(二)(source端)
  10. JavaScript_3th_函数