1.4.1 Apache Hadoop
Hadoop是由Apache基金会开发的分布式存储与计算框架。用户不需要了解底层的分布式计算原理就可以轻松开发出分布式计算程序,可以充分利用集群中闲置的计算资源,将集群的真正威力调动起来。
Hadoop由两个重要模块组成。一个是Hadoop分布式文件系统(Hadoop Distributed File System),顾名思义,就是一个分布式的文件系统,可以将文件数据分布式地存储在集群中的不同节点上。另一个是MapReduce系统,是一个针对大量数据的分布式计算系统。而当前版本的Hadoop中加入了一个名为YARN的模块,这是一个用于任务调度和资源管理的框架,而目前MapReduce便是基于YARN开发的。
1.Apache Hadoop的历史
Hadoop的思路来自谷歌提出的MapReduce分布式计算框架。谷歌的MapReduce框架可以把一个应用程序分解为许多并行计算指令,跨跃大量的计算节点运行非常巨大的数据集。而Hadoop的MapReduce则是对谷歌MapReduce的开源实现。另一方面其分布式文件系统则是谷歌的GFS的开源实现。
Hadoop原本是Apache Nutch中的一个子项目。后来Apache将MapReduce模块与Nutch Distributed File System(NDFS)单独抽离出来成为一个顶级项目。
Hadoop已经成为目前世界上最流行的分布式计算框架,Apache也建立了不少与Hadoop相关的项目,如HBase、Cassandra、Avro、Hive、Mahout等项目。
2.HDFS分布式文件系统
Hadoop分布式文件系统(HDFS)是一个主从式的分布式文件系统,是GFS的一种开源实现。
HDFS可以利用大量廉价存储器组成分布式存储集群,取代昂贵的集中式磁盘存储阵列。而HDFS集群由一个NameNode和多个DataNode组成,除此之外还有用于热备份的Secondary NameNode,防止集群出现单点故障。
接下来介绍HDFS的各个组成部分。
(1)NameNode
NameNode是整个集群的管理者。它并不存储数据本身,而负责存储文件系统的元数据。它负责管理文件系统名称空间,并控制外部客户端对文件系统的访问。
NameNode决定如何将文件内容映射到DataNode的数据块上。此外,实际数据传输并不会经过NameNode,而会让对应的DataNode接收实际数据,并处理分布式存储系统的负载均衡问题。
整个文件系统只有一个NameNode,因此很明显集群可能会出现单点故障,这点我们需要利用Secondary NameNode来解决问题。
(2)Secondary NameNode
Secondary NameNode是NameNode的备份节点,HDFS会将NameNode的数据实时备份到Secondary NameNode上,当NameNode宕机需要重启时,则可以利用Secondary NameNode中的数据加快NameNode的重启恢复速度。
(3)DataNode
DataNode是实际的数据存储节点,负责相应NameNode创建、删除和复制块的命令。NameNode会读取来自DataNode的心跳信息,以此判断DataNode是否存活。同一份数据会以多份副本存储在不同的DataNode上,一旦某一个DataNode宕机,NameNode会立即采取手段来处理问题。
(4)MapReduce模型
MapReduce既是Hadoop中的模块,也是一个计算模型。用户需要自己将算法划分成Map和Reduce两个阶段。首先将数据划分为小块的数据,将数据分配到不同计算节点的Map任务中计算,然后将计算结果汇总到Reduce节点中进行合并,得出最终结果。
MapReduce系统也是主从式的计算系统。在使用YARN后,每个集群有一个Resource-Manager,用于管理整个集群。集群中每个计算节点都有一个NodeManager,负责管理某个节点的容器并监视其资源使用。每个应用程序由一个MRAppMaster进行管理。
3.Apache Hadoop特性
Apache Hadoop具有以下几个特点。
1)高可靠性:Apache Hadoop可以可靠地将数据存储到节点上。
2)高可扩展性:Apache Hadoop的存储和计算节点可以快速扩展,并自动进行负载均衡。
3)高效性:一方面Apache Hadoop会自动在各个节点之间动态调动数据,保证每个节点存储均衡,另一方面读取数据时我们可以从不同节点并行读取,提高数据读取的速度。
4)高容错性:Apache Hadoop会将数据冗余存储在不同节点上,保证数据容错性,计算任务失败时也会自动重新分配任务。
5)低成本:一方面,Apache Hadoop是开源软件,可以节省商业软件的购买成本。同时,Apache Hadoop可以用廉价节点组成的集群取代昂贵的超级计算机,从而可以节省硬件成本。
Apache Hadoop虽然是异常可靠的分布式计算框架,但其计算存储模型也导致它的严重缺陷——实时性较差。首先MapReduce计算模型本身是一种批处理的计算模型,也就是积累一批数据,然后启动MapReduce任务处理完这一批数据,等到下次积累到一定程度,再定时或手动启动一轮新任务,而不是随着数据到来即时处理。
此外,HDFS不是一个高实时性的分布式文件系统。为了提高其实时性我们还需要自己加上很多缓存优化。而致命问题在于MapReduce各个任务之间的通信完全使用HDFS完成,这也就从根本上导致MapReduce不可能具有极高的实时性。