📜  AVRO-概述

📅  最后修改于: 2020-12-02 05:23:44             🧑  作者: Mango


要通过网络或其持久性存储传输数据,您需要对数据进行序列化。在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模式

Avro在很大程度上取决于其架构。它允许在不事先了解架构的情况下写入每个数据。它可以快速序列化,并且生成的序列化数据的大小较小。模式与Avro数据一起存储在文件中,以进行进一步处理。

在RPC中,客户端和服务器在连接期间交换架构。这种交换有助于相同命名字段,缺少字段,多余字段等之间的通信。

Avro模式是使用JSON定义的,从而简化了使用JSON库在语言中的实现。

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

节俭和协议缓冲区的比较

节俭协议缓冲区是Avro最有能力的库。 Avro在以下方面与这些框架不同-

  • Avro根据要求支持动态和静态类型。协议缓冲区和节流协议使用接口定义语言(IDL)来指定架构及其类型。这些IDL用于生成用于序列化和反序列化的代码。

  • Avro构建在Hadoop生态系统中。节俭和协议缓冲区不是在Hadoop生态系统中构建的。

与Thrift和Protocol Buffer不同,Avro的模式定义使用JSON而不是任何专有IDL。

Property Avro Thrift & Protocol Buffer
Dynamic schema Yes No
Built into Hadoop Yes No
Schema in JSON Yes No
No need to compile Yes No
No need to declare IDs Yes No
Bleeding edge Yes No

Avro的功能

以下列出的是Avro的一些突出特点-

  • Avro是与语言无关的数据序列化系统。

  • 它可以由多种语言(当前为C,C++,C#,Java, Python和Ruby)处理。

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

  • Avro提供了丰富的数据结构。例如,您可以创建一个包含数组,枚举类型和子记录的记录。可以使用任何语言创建这些数据类型,可以在Hadoop中对其进行处理,并将结果提供给第三种语言。

  • JSON中定义的Avro模式有助于以已经具有JSON库的语言进行实施。

  • Avro创建一个名为Avro数据文件的自描述文件在其中将数据及其架构存储在元数据部分中。

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

Avro的一般工作

要使用Avro,您需要遵循给定的工作流程-

  • 步骤1-创建架构。在这里,您需要根据数据设计Avro模式。

  • 步骤2-将模式读入程序。它以两种方式完成-

    • 通过生成对应于架构的类-使用Avro编译架构。这将生成与模式相对应的类文件

    • 通过使用解析器库-您可以使用解析器库直接读取架构。

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

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