现在Hadoop已经发展成为包含多个子项目的集合。虽然其核心内容是MapReduce和Hadoop分布式文件系统(HDFS),但Hadoop下的Common、Avro、Chukwa、Hive、HBase等子项目也是不可或缺的。它们提供了互补性服务或在核心层上提供了更高层的服务。图1-1展现了Hadoop的项目结构图。
下面将对Hadoop的各个子项目进行更详细的介绍。
1)Core/Common:从Hadoop 0.20版本开始,Hadoop Core项目便更名为Common。Common是为Hadoop其他子项目提供支持的常用工具,它主要包括FileSystem、RPC和串行化库,它们为在廉价的硬件上搭建云计算环境提供基本的服务,并且为运行在该运平台上的软件开发提供了所需的API。
▲图1-1 Hadoop的项目结构图
2)Avro:Avro是用于数据序列化的系统。它提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用RPC的功能和简单的动态语言集成功能。其中,代码生成器既不需要读写文件数据,也不需要使用或实现RPC协议,它只是一个可选的对静态类型语言的实现。
Avro系统依赖于模式(Schema),Avro数据的读和写是在模式之下完成的。这样就可以减少写入数据的开销,提高序列化的速度并缩减其大小。同时,也可以方便动态脚本语言的使用,因为数据连同其模式都是自描述的。
在RPC中,Avro系统的客户端和服务端通过握手协议进行模式的交换。因此当客户端和服务端拥有彼此全部的模式时,不同模式下的相同命名字段、丢失字段和附加字段等信息的一致性问题就得到了很好的解决。
3)MapReduce:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。“映射”(map)、“化简”(reduce)等概念和它们的主要思想都是从函数式编程语言中借来的。它使得编程人员在不了解分布式并行编程的情况下也能方便地将自己的程序运行在分布式系统上。MapReduce在执行时先指定一个map(映射)函数,把输入键值对映射成一组新的键值对,经过一定的处理后交给reduce,reduce对相同key下的所有value进行处理后再输出键值对作为最终的结果。