Hadoop权威指南-ch4 Hadoop的I/O(3) Avro

注:本文涉及书中4.4小结

数据序列化系统 Avro

Apache Avro是一个独立于编程语言的数据序列化系统,旨在解决Hadoop中Writable类型缺乏语言的可移植性问题。

1. Avro数据类型和模式

Avro定义了少量数据基本类型,包括基本类型和复杂类型,如本书4.4.1小节表4-9和4-10。

每个Avro语言API都可能有多种表示或映射:

(1)所有语言都支持动态映射,Java将这种映射称为“Java通用(genetic)映射

(2)Java和C++可以实现自动生成代码来表示符合某种Avro模式的数据,Java将这种映射称为“Java特殊映射

(3)Java拥有第三类映射,称为“Java自反映射(reflect mapping)”

2. Avro的序列化和反序列化

Avro为序列化和反序列化提供了API

3. 特定API

补充:什么是 Maven 插件?

Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:

1. 创建 jar 文件

2. 创建 war 文件

3. 编译代码文件

4. 代码单元测试

5. 创建工程文档

6. 创建工程报告

4. Avro数据文件

Avro的对象容器文件格式主要用于存储Avro对象序列。

Avro数据文件是可切分的,适合MapReduce快速处理。

5. Avro的互操作性

所谓“互操作性”,就是用某种语言写入数据文件,另一种语言读取该文件。

书中以Python写文件,C读文件为例,详见4.4.4小节

6.模式的解析

补充

Avro依赖于模式(Schema),通过模式定义各种数据结构,只有确定了模式才能对数据进行解释,所以在数据的序列化和反序列化之前,必须先确定模式的结构。同时可动态加载相关数据的模式,数据的读写都使用模式,这使得数据之间不存在任何其他标识,这样就减少了开销,使得序列化快速又轻巧,同时这种数据及模式的自我描述也方便了动态脚本语言的使用。

7. 排列顺序

Avro定义了对象的排列顺序。

8. Avro MapReduce

Avro提供了很多类,以便对Avro数据运行MapReduce程序。

还可以使用Avro MapReduce进行排序,详见4.4.8小节范例4-13

除了Java外,也可以用其他语言使用Avro数据。

你可能感兴趣的:(Hadoop权威指南-ch4 Hadoop的I/O(3) Avro)