开发手册 欢迎您!
软件开发者资料库

AVRO - 概述

AVRO概述 - 从概述,序列化,环境设置,模式,参考API,通过生成类进行序列化,通过生成类进行反序列化,使用分析器进行序列化,使用分析器进行反序列化,从简单而简单的步骤学习AVRO概念。

要通过网络或其持久存储传输数据,您需要序列化
数据.在Java和Hadoop提供的序列化API 之前,我们有一个名为 Avro 的特殊实用程序,一种基于模式的序列化技术.

本教程将教您如何使用Avro序列化和反序列化数据. Avro为各种编程语言提供
库.在本教程中,我们使用Java库演示示例.

什么是Avro?

Apache Avro是一种与语言无关的数据序列化系统.它是由Hadoop之父Doug Cutting开发的.由于Hadoop可写类缺乏语言可移植性,因此Avro非常有用,因为它处理可由多种语言处理的数据格式. Avro是在Hadoop中序列化数据的首选工具.

Avro有一个基于模式的系统.与语言无关的模式与其读写操作相关联. Avro序列化具有内置架构的数据. Avro将数据序列化为紧凑的二进制格式,可以由任何应用程序进行反序列化.

Avro使用JSON格式来声明数据结构.目前,它支持Java,C,C ++,C#,Python和Ruby等语言.

Avro Schemas

Avro在很大程度上依赖于它的模式的.它允许在没有模式的先验知识的情况下编写每个数据.它快速序列化,并且生成的序列化数据的大小较小.模式与Avro数据一起存储在文件中以供进一步处理.

在RPC中,客户端和服务器在连接期间交换模式.此交换有助于相同命名字段,缺少字段,额外字段等之间的通信.

使用JSON定义Avro模式,简化其在具有JSON库的语言中的实现.

与Avro一样,Hadoop中还有其他序列化机制,例如序列文件,协议缓冲区, Thrift .

与Thrift和协议缓冲区的比较

Thrift 协议缓冲区是Avro最具竞争力的库. Avro在以下方面与这些框架有所不同;

  • Avro根据要求支持动态和静态类型. Protocol Buffers和Thrift使用接口定义语言(IDL)来指定模式及其类型.这些IDL用于生成序列化和反序列化的代码.

  • Avro构建在Hadoop生态系统中. Thrift和Protocol Buffers不是在Hadoop生态系统中构建的.

与Thrift和Protocol Buffer不同,Avro的架构定义是JSON而不是任何专有IDL.

属性AvroThrift&协议缓冲区
动态架构
内置于Hadoop
JSON中的架构
无需编译
无需声明ID
出血边缘

Avro的特点

下面列出的是Avro&minus的一些突出特点;

  • Avro是语言中立的数据序列化系统.

  • 它可以用多种语言处理(目前有C,C ++,C#,Java,Python和Ruby).

  • Avro创建二进制结构格式,可压缩可分割.因此,它可以有效地用作Hadoop MapReduce作业的输入.

  • Avro提供丰富的数据结构.例如,您可以创建包含数组,枚举类型和子记录的记录.这些数据类型可以用任何语言创建,可以在Hadoop中处理,结果可以提供给第三种语言.

  • Avro schemas JSON 中定义,便于在已有JSON库的语言中实现.

  • Avro创建自描述文件命名为 Avro数据文件,,其中将数据及其架构存储在元数据部分中.

  • Avro也用于远程过程调用(RPC).在RPC期间,客户端和服务器在连接握手中交换模式.

Avro的一般工作

要使用Avro,您需要遵循给定的工作流程并减去;

  • 步骤1 &减号;创建模式.在这里,您需要根据您的数据设计Avro架构.

  • 第2步 : 将模式读入您的程序.它以两种方式完成 :

    • 通过生成与模式相对应的类 : 使用Avro编译模式.这会生成一个与架构相对应的类文件

    • 使用解析器库 : 您可以使用解析器库直接读取架构.

  • 步骤3 : 使用为Avro提供的序列化API序列化数据,该序列化API可在包org.apache.avro.specific 中找到.

  • 第4步 : 使用为Avro提供的反序列化API反序列化数据,可以在包org.apache.avro.specific中找到.