一.引言
Hadoop是Apache开源组织在2005年推出的一个分布式计算开源框架,至今已在许多大型网站上得到应用,如:Yahoo就是一个例子。Hadoop非常适用于海量数据存储与分析,它的特点是:使用起来配置简单,数据安全,硬件投入成本低。
二.Hadoop的核心设计
Hadoop的核心设计是:HDFS+MapReduce。
1.HDFS
HDFS是Hadoop使用的分布式文件系统,它是具有高度容错性的系统,适合部署在廉价的机器上。另外HDFS能提供高吞吐量的数据访问,所以非常适合大规模数据集上的应用。
(1)HDFS的前提与设计目标
关于这个话题,《Hadoop分布式文件系统:架构和设计》一文讲得非常详细(hyddd极力推荐此文:>),这里简单说下HDFS最初的想法。
【1】硬件错误
HDFS有成千上万的服务器构成,硬件错误是非常平常的事,因此错误检测和快速、自动的恢复是HDFS最核心的架构目标。
【2】流式数据访问
HDFS的设计中更多的考虑到了数据批处理,而不是用户交互处理。比之数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。
【3】大规模数据集
HDFS一开始设计就着眼于大规模的数据集的应用。
【4】简单的一致性模型
HDFS的文件访问模型是:“一次写入多次读取”。这种模型简化了数据一致性的问题,并且使提高吞吐量成为了可能。“MapReduce”和“网络爬虫”都非常适合这种模型,其实这也就是为什么上面说“Hadoop非常适用于海量数据存储与分析”!
【5】移动计算比移动数据更划算
一个应用请求的计算,离它操作的数据越近就越高效,在数据达到海量级别的时候更是如此。将计算移动到数据附近,比之将数据移动到应用所在显然更好。显然,HDFS就是为“移动计算”做准备。
【6】异构软硬件平台间的可移植性
HDFS在设计的时候就已经考虑到移植性的问题。
(2)HDFS架构
下面是HDFS的架构图:
HDFS采用Master/Slave架构,一个HDFS集群是由一个Namenode和N个Datanodes组成。
1.2Namenode
Namenode是一个中心服务器,它的工作包括:
(1)管理文件系统的namespace
(2)外界对本系统存储的文件的访问,比如:打开,关闭,重命名,删除……,并把需要的数据块映射到具体Datanode节点上。
2.Datanode
Datanode一般是子节点,负责管理本节点的存储。实际上,一个大文件往往会分割成N个小文件,然后存储到不同的Datanode节点上,而相应的Datanode就会负责管属于它的这些小文件。
3.用户访问流程
用户通过访问HDFS的namespace实现对文件系统访问,在Namenode的统一调度下,实现用户的各种操作,而这些操作最终都会落实在Datanode上。
2.MapReduce
MapReduc是Google的一项重要技术,它是一个编程模型,用以进行大数据量的计算。hyddd觉得,它的价值很大一部份体现在:简化并行计算编程模型,降低了开发并行应用的入门门槛。
MapReduce源于这个模型的两大核心操作:Map和Reduce。顾名思义,“Map(展开)”就是将一个任务分解成为多个任务。而“Reduce”就是将分解后多任务处理的结果汇总起来,得出最后的分析结果。而作为开发人员,你可以用JAVA去实现Map和Reduce操作。
三.Hadoop的其他子项目
Hadoop还包括:Hive,ZooKeeper……等子项目,详细可到官方网站:http://hadoop.apache.org/查询。
这里值得一提的是Hive。
Hive
Hive是facebook数据团队基于hadoop开发的数据仓库封装。以数据库的方式去管理HDFS,极大地简化了MapReduce统计功能的实现。
优点:可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,数据表分区方式十分适合HDFS数据管理,在简单应用中使用非常方便!
缺点:目前版本不稳定,有些bug,SQL语句还不够强大。