Hadoop是一个由Apache基金会开发的分布式系统基础架构。Hadoop起源于开源网络搜索引擎Apache Nutch,2003年和2004年,谷歌分别发表论文描述了谷歌分布式文件系统GFS和分布式数据处理系统MapReduce。基于这两篇论文,Nutch的开发者开始着手开源版本的实现,实现了Hadoop系统的核心——分布式文件存储系统HDFS和分布式计算框架MapReduce。2006年,开发人员将HDFS和MapReduce移出Nutch,至此,用于数据存储和分析的分布式系统Hadoop诞生了。目前,Hadoop在工业界得到了广泛应用,包括EMC、IBM、Microsoft在内的国际公司都在直接或间接地使用包含Hadoop的系统,Hadoop成为公认的大数据通用存储和分析平台。Hadoop经过十多年的发展,形成了一个完整的分布式系统生态圈。如图1-20所示,Hadoop分布式系统包括核心的分布式文件存储系统HDFS和分布式计算框架MapReduce,以及用于集群资源管理的YARN。
图1-20 Hadoop的总体架构
Hadoop生态圈支持在用户不了解分布式底层细节的情况下,帮助用户开发分布式应用。Hadoop生态圈中有很多工具和框架,下面对几种典型应用进行介绍。
● Hadoop生态圈包括数据仓库Hive,这是一种可以存储、查询和分析存储在HDFS中的数据的工具。
● HBase是基于HDFS开发的面向列的分布式数据库,如果需要实时地随机访问超大规模数据集,就可以使用HBase。
● Pig为大型数据集的处理提供了更高层次的抽象,使用户可以使用更为丰富的数据结构,在MapReduce程序中进行数据变换操作。
● ZooKeeper为Hadoop提供了分布式协调服务,使集群具有更高的容错性。
接下来介绍Hadoop中用于数据存储的HDFS和HBase的分布式架构,以及用于集群资源管理的分布式管理器YARN。
如图1-21所示,HDFS集群按照管理节点-工作节点模式运行,其中NameNode为管理节点,DataNode为工作节点,SecondaryNameNode为辅助NameNode。NameNode与DataNode之间是一对多的关系。同时,HDFS通过心跳机制、负载均衡和DataNode替换策略等手段来保证可用性和高可靠性。其中:NameNode负责管理数据块映射、处理客户端的读写请求、配置副本策略、管理HDFS的名称空间;DataNode负责存储Client发来的数据块(block)、执行数据块的读写操作;SecondaryNameNode作为NameNode备份节点,分担NameNode的工作量,同时对NameNode进行冷备份。
图1-21 HDFS的分布式体系结构
如图1-22所示,HBase是一个在HDFS上开发的面向列的分布式数据库,服务依赖于ZooKeeper。HBase的分布式结构与HDFS相似,它用一个Master节点协调管理一个或多个Regionserver从属机。
● Master节点负责启动一个全新的安装、把区域分配给注册的Regionserver、恢复Regionserver的故障等,值得一提的是,Master的负载很低。
● Regionserver负责零个或多个区域的管理以及响应客户端的读写请求,同时负责区域划分。
● ZooKeeper集群负责管理hbase:meta目录表的位置以及当前集群主控机地址等重要信息。如果有服务器崩溃,ZooKeeper还能进行分配协调。
● Client包含访问HBase的接口,维护一些Cache来加快对HBase的访问。
图1-22 HBase分布式体系结构
图1-23是YARN(Yet Another Resource Negotiator)的分布式体系结构示意图。YARN是Hadoop的集群资源管理系统,随Hadoop 2.x一起发行,起初是为了改善MapReduce的性能而设计的,但现在YARN因其良好的通用性同样可以支持Spark、Tez等分布式计算框架。其中:Resource Manager是一个全局的资源管理器,管理整个集群的计算资源,并将这些资源分配给应用程序;Application Manager是应用程序级别的管理器,管理运行在YARN上的应用程序;Node Manager是YARN中每个节点上的代理管理器,管理Hadoop集群中的单个计算节点。
图1-23 YARN的分布式体系结构