Avro 简介

2023-10-19 10:38
文章标签 简介 avro

本文主要是介绍Avro 简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/239227

相关文章

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。

SaaS、PaaS、IaaS简介

云计算、云服务、云平台……现在“云”已成了一个家喻户晓的概念,但PaaS, IaaS 和SaaS的区别估计还没有那么多的人分得清,下面就分别向大家普及一下它们的基本概念: SaaS 软件即服务 SaaS是Software-as-a-Service的简称,意思是软件即服务。随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。 它是一种通过Internet提供

LIBSVM简介

LIBSVM简介 支持向量机所涉及到的数学知识对一般的化学研究者来说是比较难的,自己编程实现该算法难度就更大了。但是现在的网络资源非常发达,而且国际上的科学研究者把他们的研究成果已经放在网络上,免费提供给用于研究目的,这样方便大多数的研究者,不必要花费大量的时间理解SVM算法的深奥数学原理和计算机程序设计。目前有关SVM计算的相关软件有很多,如LIBSVM、mySVM、SVMLight等,这些

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

新一代车载(E/E)架构下的中央计算载体---HPC软件架构简介

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。 时间不知不觉中,快要来到夏末秋初。一年又过去了一大半,成

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工