代码改变世界

初探Hadoop

2009-09-27 22:31  hyddd  阅读(1187)  评论(0编辑  收藏

一.引言

    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 架构

    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语句还不够强大。


四.参考资料

【1】Hadoop分布式文件系统:架构和设计

【2】http://www.hadoop.org.cn/

【3】http://hadoop.apache.org/

【4】http://cn.hadoop.org/

【5】http://rdc.taobao.com/blog/dw/archives/category/hadoop