注:本文涉及书中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数据。