Hadoop基本架构介绍

来源:互联网 发布:开源cms php 编辑:程序博客网 时间:2024/06/10 20:04

Hadoop基本架构

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

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

HDFS架构

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

HDFS的架构如图1所示,总体上采用了master/slave架构,主要由以下几个组件组成:Client、NameNode、Secondary NameNode(在Hadoop 0.21.0版本中,Secondary NameNode被 Checkpoint Node代替)和DataNode。

HDFS架构图][图1 HDFS架构图

                                                 图1 HDFS架构图

Client

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

NameNode

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

Secondary NameNode

Secondary NameNode最重要的任务是定期合并fsimage和edits日志,并传输给NameNode。值得注意的是,为了减小NameNode压力,fsimage和editlog的合并不会由NameNode自己完成,而是由Secondary NameNode完成,并将文件存储到磁盘上。

DataNode

一般而言,每个slave节点上安装一个DataNode,它负责实际数据的存储,并将数据信息定期汇报给NameNode。DataNode以固定大小的block为基本单位组织文件内容,默认情况下block的大小为64MB。当用户上传一个大文件到HDFS上时,该文件会被切分成若干个block,分别存储到不同的DataNode;同时,为了保证数据可靠,会将同一个block以流水线的方式写到不若干个(默认为3,该参数可以配置)不同的DataNode上。这种文件切割后存储的过程对用户是透明的。

MapReduce架构

同HDFS一样,Hadoop MapReduce也采用了master/slave架构,具体如图2所示。它主要由以下几个组件组成:Client、JobTracker、TaskTracker和Task。

Hadoop MapReduce架构图][Hadoop MapReduce架构图

                                                图2 Hadoop MapReduce架构图

Client

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

JobTracker

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

TaskTracker

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

Task

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

split与block的对应关系][split与block的对应关系

                                                 图3 split与block的对应关系

Map Task执行过程如图4所示。由该图可知,Map Task先将对应的split迭代解析成一个个key/value对依次调用用户自定义的map函数进行处理,最终将临时结果存放到本地磁盘上,其中临时数据被分成若干个partition,每个partition将被一个Reduce Task处理。

Map Task执行流程][Map Task执行流程

                                                 图4 Map Task执行流程

Reduce Task执行过程如图5所示。该过程分为三个阶段:1.从远程节点上读取Map Task的中间结果(称为“Shuffle”阶段);2.按照key对key/value对进行排序(称为“Sorting”阶段);3.依次读取< key,value list >,调用用户自定义的reduce函数处理,并将最终结果存放到HDFS上(称为“Reduce阶段”)。

Reduce Task执行过程][Reduce Task执行过程

                                                图5 Reduce Task执行过程 


Standing on shoulders of Giants

0 0
原创粉丝点击