1.Common。是为Hadoop其他子项目提供支持的常用工具。它主要包括FileSystem、RPC和串行化库,并且为运行在云计算环境平台上的软件开发提供所需的API。
2.Avro。是用于数据序列化的系统。提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用RPC的功能和简单的动态语言集成功能。
注意,Avro系统依赖于模式(Schema)。数据的读和写是在模式之下完成的。
3.MapReduce。是编程框架。从其自身的命名特点就可以看出,MapReduce是由两个阶段组成:Map和Reduce。用户只需编写map()和reduce()两个函数,即可完成简单的分布式程序的设计。
map()函数以key/value对作为输入,产生另外一系列key/value对作为中间输出写入本地磁盘。MapReduce框架会自动将这些中间数据按照key值进行聚集,且key值相同(用户可设定聚集策略,默认情况下是对key值进行哈希取模)的数据被统一交给reduce()函数处理。
Hadoop将输入数据切分成若干个输入分片(input split,简称split),并将每个split交给一个Map Task处理;Map Task不断地从对应的split中解析出一个个key/value,并调用map()函数处理,处理完之后根据Reduce Task个数将结果分成若干个分片(partition)写到本地磁盘;同时,每个Reduce Task从每个Map Task上读取属于自己的那个partition,然后使用基于排序的方法将key相同的数据聚集在一起,调用reduce()函数处理,并将结果输出到文件中。
InputFormat将指定输入文件格式。将输入数据切分成若干个split,且将每个split中的数据解析成一个个map()函数要求的key/value对。
Partitioner确定map()函数产生的每个key/value对发给哪个Reduce Task函数处理。
OutputFormat指定输出格式,即每个key/value对以何种形式保存到输出文件中。
reduce()函数以key及对应的value列表作为输入,经合并Key相同的value值后,产生另外一系列key/value对作为最终输出写入HDFS。
4.HDFS。是分布式文件系统。采用了主/从(Master/Slave)结构模型。一个HDFS集群是由一个NameNode 和若干个DataNode组成的。
5.Chukwa。是开源的数据收集系统,用于监控和分析大型分布式系统的数据。是在Hadoop的MapReduce和HDFS之上搭建的。Chukwa是通过HDFS来存储数据,并依赖MapReduce任务处理数据。
6.Hive。是数据仓库工具。
7.HBase。是分布式数据库。
8.Pig。是一个对大型数据集进行分析、评估的平台。
9.ZooKeeper。是一个为分布式应用所设计的开源协调服务。