一、Hadoop简介

         Hadoop最早起源于Nutch。Nutch是一个开源的网络搜索引擎,由Doug Cutting于2002年创建。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引,查询等功能,随着网页抓取数量的增加,遇到严重的可扩展问题,即不能解决数十亿网页的存储和索引的问题,之后,Google发布的两篇论文(The Google File SystemMapReduce: Simplified Data Processing on Large Clusters)为该问题提供了可行的解决方案。

    Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序,以流的形式访问(streaming access)文件系统中的数据。

二、Hadoop的优点

      Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。

    Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:

   ⒈高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。

   ⒉高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

   ⒊高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

   ⒋高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

    Hadoop带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C、C++。

三 Hadoop架构

       Hadoop由两部分组成,分别是分布式文件系统(HDFS)和分布式计算框架MapReduce。其中分布式文件系统(DFS)主要用于大规模数据的分布式存储,而MapReduce则构建在分布式文件系统之上,对于存储在分布式文件系统中的数据进行分布式计算

   在Hadoop中,MapReduce底层的分布式文件系统是独立模块,用户可以按照约定的一套接口实现自己的分布式文件系统,存储在该文件系统上的数据便可以被MapReduce处理。Hadoop默认使用的是分布式文件系统是(Hadoop Distributed File System,Hadoop分布式文件系统),它与MapReduce框架紧密结合。下面首先介绍HDFS,然后介绍MapReduce计算框架。

   1、HDFS架构

   HDFS是一个具有高度容错性的分布式文件系统,适合部署在廉价的机器上,HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。架构图 如下图所示:

  

Hadoop部署架构图

    HDFS的架构总体上采用了m/S(master/slave)架构,主要有以下几个组件组成:Client、NameNode、Secondary NodeNode和DataNode。

    (1)Client

     Client(用户)通过NameNode和DataNode交互访问HDFS中的文件。Client提供一个类似POSIX的文件系统接口工用户调用。

    (2)NameNode

     整个Hadoop集群中只有一个NameNode.它是整个系统的中枢,它负责管理HDFS的目录树和相关文件 元数据信息。这些信息是以“fsimage(HDFS元数据镜像文件)和Editlog(HDFS文件改动日志)两个文件形式存放在本地磁盘,当HDFS重启时冲洗构造出来的。NameNode还负责监控各个DataNode的健康状态,一旦发现某个DataNode损坏,则将DataNode移出HDFS并重新备份其上面的数据。

    (3)Secondary NameNode

    Secondary Namenode 最重要的任务并不是为NameNode元数据进行热备份,而是定期合并fsimage和edits日志,并传输给NameNode,为了减轻NameNode压力,NameNode自己并不会合并fsimage和edits,并将文件存储到磁盘上,而是交由Secondary NameNode完成。

    (4)DataNode

    每个Slave节点上安装一个DataNode,它负责实际的数据存储,并将数据信息定期汇报给NameNode。DataNode以固定大小的block为基本单位组织文件内容,block默认大小为64MB(GFS也是64MB)。当用户上传一个大于64MB的文件时,该文件会被切成若干个block,分别存储到不同的DataNode(更容易分布式处理);同时为了数据可靠,会将同一个block以流水线的方式写到若干个(配置中默认为3)不同的DataNode上。

    2、Hadoop MapReduce架构

        Hadoop MapReduce也采用Master/Slave(M/S)架构。它主要有以下几个组件组成:Client、ClientTracker、TaskTracker和Task。 

         (1)Client

         用户编写的MapReduce 程序通过Client 提交到JobTracker 端;同时,用户可通过Client 提供的一些接口查看作业运行状态。在Hadoop 内部用“作业”(Job)表示MapReduce 程序。一个MapReduce 程序可对应若干个作业,而每个作业会被分解成若干个Map/Reduce 任务(Task)。

         (2)JobTracker

        JobTracker 主要负责资源监控和作业调度。JobTracker 监控所有TaskTracker 与作业的健康状况,一旦发现失败情况后,其会将相应的任务转移到其他节点;同时,JobTracker 会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在Hadoop 中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的调度器。

         (3)TaskTracker

         TaskTracker 会周期性地通过Heartbeat 将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker 发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)。TaskTracker 使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(CPU、内存等)。一个Task 获取到一个slot 后才有机会运行,而Hadoop 调度器的作用就是将各个TaskTracker 上的空闲slot 分配给Task 使用。slot 分为Map slot 和Reduce slot 两种,分别供MapTask 和Reduce Task 使用。TaskTracker 通过slot 数目(可配置参数)限定Task 的并发度。

        (4)Task

         Task 分为Map Task 和Reduce Task 两种,均由TaskTracker 启动。我们知道,HDFS 以固定大小的block 为基本单位存储数据,而对于MapReduce 而言,其处理单位是split。split 是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。但需要注意的是,split 的多少决定了Map Task 的数目,因为每个split 会交由一个Map Task 处理。

  下一节将介绍Hadoop配置文件,然后逐步深入Hadoop内核源码的分析研究。

  本文出处:http://www.cnblogs.com/bester/p/3255307.html

posted on 2013-08-13 17:20  Bester  阅读(5788)  评论(1编辑  收藏  举报