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模式

Avro严重依赖其模式。它允许在没有预先了解模式的情况下写入任何数据。它序列化速度快,生成的序列化数据大小较小。模式与Avro数据一起存储在一个文件中,以便进一步处理。

在RPC中,客户端和服务器在连接过程中交换模式。这种交换有助于相同名称的字段、缺失的字段、额外的字段等之间的通信。

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

与Avro类似,Hadoop中还有其他序列化机制,例如Sequence Files、Protocol BuffersThrift

与Thrift和Protocol Buffers的比较

ThriftProtocol Buffers是与Avro最具竞争力的库。Avro与这些框架的不同之处在于:

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

  • Avro内置于Hadoop生态系统中。Thrift和Protocol Buffers并非内置于Hadoop生态系统中。

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

属性 Avro Thrift & Protocol Buffer
动态模式
内置于Hadoop
JSON模式
无需编译
无需声明ID
前沿技术

Avro的功能

以下是Avro的一些突出功能:

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

  • 它可以被多种语言处理(目前为C、C++、C#、Java、Python和Ruby)。

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

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

  • Avro模式使用JSON定义,方便在已具有JSON库的语言中实现。

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

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

Avro的一般工作原理

要使用Avro,您需要遵循以下工作流程:

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

  • 步骤2 - 将模式读入您的程序。这可以通过两种方式完成:

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

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

  • 步骤3 - 使用Avro提供的序列化API进行数据序列化,该API位于org.apache.avro.specific包中。

  • 步骤4 - 使用Avro提供的反序列化API进行数据反序列化,该API位于org.apache.avro.specific包中。

广告