- AVRO Schemas & APIs
- AVRO - Schemas
- AVRO - Reference API
- AVRO By Generating a Class
- Serialization by Generating Class
- Deserialization by Generating Class
- AVRO Using Parsers Library
- Serialization Using Parsers
- Deserialization Using Parsers
- AVRO Useful Resources
- AVRO - Quick Guide
- AVRO - Useful Resources
- AVRO - Discussion
AVRO - 概述
要通过网络传输数据或用于持久存储,您需要对数据进行序列化。在Java 和 Hadoop 提供的序列化 API之前,我们有一个特殊的实用程序,称为Avro,它是一种基于模式的序列化技术。
本教程教您如何使用 Avro 序列化和反序列化数据。Avro 提供各种编程语言的库。在本教程中,我们将使用 Java 库演示示例。
什么是阿夫罗?
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。
与 Thrift 和 Protocol Buffer 的比较
Thrift和Protocol Buffers是 Avro 最有能力的库。Avro 与这些框架的不同之处如下:
Avro 根据要求支持动态和静态类型。Protocol Buffers 和 Thrift 使用接口定义语言 (IDL) 来指定模式及其类型。这些 IDL 用于生成序列化和反序列化代码。
Avro 构建于 Hadoop 生态系统中。Thrift 和 Protocol Buffers 不是构建在 Hadoop 生态系统中的。
与 Thrift 和 Protocol Buffer 不同,Avro 的模式定义采用 JSON 格式,而不是任何专有的 IDL 格式。
财产 | 阿夫罗 | Thrift 和协议缓冲区 |
---|---|---|
动态模式 | 是的 | 不 |
内置于 Hadoop 中 | 是的 | 不 |
JSON 中的架构 | 是的 | 不 |
无需编译 | 是的 | 不 |
无需申报ID | 是的 | 不 |
最前沿 | 是的 | 不 |
阿夫罗的特点
下面列出了 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 schema。
步骤 2 - 将模式读入您的程序中。它有两种方式完成 -
通过生成对应于架构的类- 使用 Avro 编译架构。这会生成与模式对应的类文件
通过使用解析器库- 您可以使用解析器库直接读取模式。
步骤 3 - 使用为 Avro 提供的序列化 API 序列化数据,该 API 可以在包 org.apache.avro.specific中找到。
步骤 4 - 使用为 Avro 提供的反序列化 API 反序列化数据,该 API 位于包 org.apache.avro.spec. 中。