Hadoop架构和原理

简介
Hadoop使由Apache研发的一套分布式存储和计算框架,目前被广泛应用于大数据存储和计算业务中。Hadoop包含很多技术和组件,其中主要有文件存储HDFS、计算引擎MapReduce、资源调度YARN三大组件。

在这里插入图片描述
HDFS
Distributed File System (HDFS)是Hadoop分布式文件存储系统。不同于其他分布式文件存储系统,HDFS包含高度容错机制(数据副本机制),并且设计初衷是节省资源可运行于廉价机器之上。
HDFS采用master/slave架构,一个或多个NameNode做为master,管理文件系统Namespace、文件副本和客户端对集群文件的访问。多个DataNode做为slave节点,用于数据存储,通常一个物理节点做为一个DataNode。一个文件通常被切分成一个或多个block文件块,存储在一个或者多个DataNode上。每个DataNode负责管理自身节点上的block,并周期性像NameNode进行汇报block信息。
下图为官网HDFS架构图:

在这里插入图片描述

客户端向HDFS写数据:
客户端client发送请求到NameNode询问是否可以写入,如果NameNode返回允许写入,client将文件切分成多个block,请求NameNode,由NameNode返回DataNode列表给client,然后client与对应的DataNode建立连接,流式写入block数据。由于数据存在副本机制,在写入过程中,数据包由当前节点传入下一个节点,下一个节点存储完毕再次传入下一个节点,完成节点间数据复制,同时也不会增加client写入数据时间。
客户端向HDFS读数据:
客户端携带读取的文件路径和名称请求NameNode,NameNode查询文件block块和DataNode信息,根据Hadoop集群拓扑图中,按照就近原则返回对应的block和DataNode信息给client,client直接向DataNode建立连接,DataNode将数据返回给client。

YARN
YARN全称为Yet Another Resource Negotiator,直译成“另一种资源调度器”。它负责整个集群资源调度和监控,MapReduce的Job资源调度和监控也是由YARN完成。官方YARN架构图:

在这里插入图片描述 

另外,除了NameNode具有HA,YARN的ResourceManager也有高可用HA,通过zookeeper进行切换,官方架构图:

在这里插入图片描述

 

YARN主要有四个组件,ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)和Container:
**ResourceManager(RM):**负责对各个NameNode上资源进行统一调度管理。Client向ResourceManager提交Job后,ResourceManager在DataNode上分配一个Container,在这个Container中启动ApplicationMaster并监控其运行状态。ApplicationMaster向ResourceManager申请Job运行所需资源,ResourceManager为其分配Container。ResourceManager又包含调度器(Scheduler)和应用程序管理器(Applications Manager):

调度器(Scheduler)调度器通过capacity和queue形式分配集群资源(如每个队列可占用多少资源、最多执行多少个Job等),将系统资源以Container形式分配给各个Job。调度器可进行配置,如CapacityScheduler、FairScheduler。
应用程序管理器(Applications Manager)负责管理所有应用程序,包括程序提交、与调度器协商资源、ApplicationMaster的启动/停止和失败重启以及状态监控、Container运行状态监控。

**NodeManager(NM):**负责各自节点上资源和任务管理。接收ApplicationMaster请求,创建/停止Container,定时向ResourceManager发送心跳报告,发送本节点资源使用情况和Container运行状态。
**ApplicationMaster(AM):**每个Job都包含一个ApplicationMaster,负责Job状态监控和失败重启。一方面它向ResourceManager协调Job运行所需资源,另一方面与NodeManager协作,负责Task的执行和监控。
**Container:**YARN中资源调度和分配单位,它封装了内存、CPU、磁盘、网络等。Job运行时ApplicationMaster向ResourceManager申请资源时,ResourceManager返回的资源就是以Container形式的。

YARN中Job运行过程

在这里插入图片描述
1、client向ResourceManager提交应用程序
2、ResourceManger通知NodeManager启动一个Container,在Container中启动ApplicationMaster
3、ApplicationMaster向ResourceManager注册信息,将Job拆分成多个Task,然后向ResourceManager申请资源,并监控各个Task运行状态,定期向ResourceManager发送心态汇报自身和其他Container状态
4、ApplicationMaster轮询向ResourceManager申请和领取资源
5、ApplicationMaster申请到资源后通知NodeManager启动任务
6、NodeManager启动Container并运行分配的Task
7、各个Task运行时会向ApplicationMaster发送心跳,汇报自身任务运行状态和进度,失败时由ApplicationMaster重启Task
8、待所有Task运行完成后,由ApplicationMaster向ResourceManager申请注销并释放资源

 

MapReduce
MapReduce做为是一个分布式计算框架,也是利用了分治思想,通过将数据分解成多个并行的任务,这是第一阶段Map,然后将Map运行结果合并,这是第二阶段Reduce。
以下是一个WordCount程序数据处理过程:

在这里插入图片描述
1、Input数据输入
2、Splitting数据切分,按照一定的规则将数据切分成多组做为map的输入,每一组数据对应一个map任务
3、Map阶段按照用户自定义的map函数逻辑进行数据统计计算
4、Shuffle阶段是介于map和reduce之间,一方面会对数据进行partition、sort和merge,用于临时存储map的输出结果,另一方面将输出结果做为reduce的输入
5、Reduce阶段接收到shuffle的输入数据,按照用户自定义的reduce逻辑进行数据统计计算
6、最终reduce计算结果以文件形式存储到HDFS
Shuffle阶段做为MapReduce的精髓所在,通常也做为程序进行调优的关键所在。

 

你可能感兴趣的:(Hadoop架构和原理)