Hadoop 2.x 架构

Hadoop2.0产生背景

一、Hadoop 1.0中HDFS和MapReduce在高可用、扩展性等方面存在问题
1、HDFS存在问题
NameNode单点故障,难以应用于在线场景
NameNode压力过大,且内存受限,影响系统可扩展性

2、MapReduce存在的问题
JobTracker访问压力大,影响系统可扩展性
难以支持除MapReduce计算框架之外的计算框架、比如spark、storm

Hadoop1.0只支持离线计算,不支持spark是内存计算框架(最快的得到结果),storm是流式计算框架(计算实时数据)

Hadoop1.x和2.x比较


801.png

一、Hadoop2.x由HDFS、MapReduce、和YARN三个分支构成
1、HDFS: NNFederation 、HA 多了这两个部分
2、MapReduce:运行在YARN上的MR
3、YARN:是对应的资源管理系统

Federation是联邦的意思, FBI联邦调查局


NNFederation NameNode Federation:
将元数据分成两个独立NameNode去工作

是独立的并行的

YARN是分布式资源管理系统,进行任务调度。某些计算框架要运行一些任务的时候,这些任务需要在各个节点上执行,需要向YARN申请资源(申请CPU资源和内存资源),由于是分布式的资源管理,YARN知晓任何一个节点的情况,(是否空闲CPU以及内存使用率等),所以任务执行的时候首先向YARN进行申请资源。

假如有十个map-reduce执行,每一个map-reduce有很多的任务,每一个任务都向YARN申请资源,所有任务都向YARN申请资源,这样资源分配就比较均衡

HDFS2.X优点

一、解决HDFS1.0中单点故障和内存受限问题
二、解决单点故障
1、HDFSHA: 通过主备NameNode解决单点故障
2、如果主NameNode发生故障,则切换到备NameNode
三、解决内存受限问题
1、HDFSFederation(联邦)解决内存受限问题 把数据分为多份 多个NameNode相互独立工作,共享DataNode
2、水平扩展,支持多个NameNode
3、每个NameNode分管一部分目录
4、所有NameNode共享所有DataNode存储资源
四、2.X仅仅是架构上做了变化,使用方式不变
1、 对HDFS使用者透明
2、HDFS1.X中的命令和API仍可以使用

HDFS2.X HA(high available 高可用)


Paste_Image.png

分析上图结构
最底层为DataNode,DataNode启动之后会进行节点信息上报给NameNode

一、NNActive和NN Standby

NN Active 和NN Standby是两个NameNode节点
主为:Active
备为:Standby (standby可以有多个)

在某一个时刻只有一个主(active)

二、JournalNode的作用


DataNode启动汇报数据时,往多个NameNode都要汇报。
NNActive和NNStandby中的文件完全一样,一旦NNActive挂掉以后启用NNStandby

NNActive的数据除了在内存中存储,也会在远程集群上存储一份,并不在本地进行存储,NNActive会把数据备份到图上JN中,
JN为一个集群,Journal为日志的意思,JournalNode就是日志备份节点

所有的NaemNode不管是主还是备,都要从JournalNode中进行读写,这个读写是实时的。所以NNActive和NNStandby信息一致。当一个挂掉以后,另外一个可以直接使用。

JournalNode是一个集群,所以很难挂掉,这样就保证了高可用

三、FailoverControllerActive说明

控制NameNode切换,对NameNode进行心跳检查
并且也对zookeeper进行心跳检查,zookeeper的主要工作就是做高可用,可以为用户提供开发接口


整个过程如下
客户端在访问NameNode时首先访问zookeeper,zookeeper返回可用的NN,然后客户端再访问NN

zookeeper通过控制FailoverController 进行NameNode的切换

HDFS2.0 HA结构性说明

一、主备NameNode
二、解决单点故障
1、主NameNode对外提供服务,备NameNode同步主NameNode元数据以待切换
2、所有DataNode同时向两个NameNode汇报数据块信息
三、两种切换选择
1、手动切换:通过命令实现主备之间的切换可以用于HDFS升级等场合
2、自动切换:基于zookeeper实现
四、基于Zookeeper自动切换方案
1、zookeeperFailoverController:监控NameNode健康状态,并向zookeeper注册NameNode,NameNode挂掉以后,ZKFC为NameNode竞争锁,获得ZKFC锁的NameNode变为active,(ZKFC为zookeeper failvoer controller)

zookeeper failover controler 每一个NameNode都会有, 当一个NameNode挂掉以后,对应的zookeeper failover controler就会在zookeeper上获取竞争锁,当成功获取以后,对应的NameNode就变为了主。

HDFS2.X Federation(这个只有数据节点很多很庞大的时候才会用到对namenode进行扩展)

一、通过多个namenode/namespace把元数据的存储和管理分散到多个节点上,使用namenode/namespace可以通过增加机器来进行水平扩展
二、能够把单个namenode的负载分散到多个节点上,在HDFS数据规模较大的时候不会降低HDFS的性能。可以通过多个namenode来隔离不同类型的应用,把不同类型应用的HDFS元数据的存储和管理分派到不同的namenode中


Paste_Image.png

上图是多个namenode,如果取数据,需要指明从某个namenode中取,如果要进行HA,需要对多个namenode分别进行HA.

YARN 分布式资源管理系统

一:YARN :Yet Another Resource Negotiator;
1、Hadoop2.0新引入的资源管理系统,直接从MRv1演化而来,分别由ResourceManager和ApplicationMaster进程实现
2、ResourceManager:负责整个集群的资源管理和调度
3、ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控、容错等

二:YARN的引入,使得多个计算框架可运行在一个集群中
1、每个应用程序对应一个ApplicationMater
2、目前多个计算框架可以运行在YARN上,比如,MapReduce、Spark、Storm等
ResourceManager负责资源管理,只有一个,ApplicationMaster有多个,每个datanode上都会有一个

MapReduce on YARN

1、将MapReduce作业直接运行在YARN上,而不是由JobTracker和TaskTracker构建的MRv1系统中
2、基本功能模块
YARN:负责资源管理和调度
MRAppMaster:负责任务切分、任务调度、任务监控和容错等
MapTask/ReduceTask:任务驱动引擎、与MRv1一致
3、每个MapReduce作业对应一个MRAppMaster
MRappMater任务调度
YARN将资源分配给MRAppMaster
MRAppMaster进一步将资源分配给内部的任务
4、MRAppMaster容错
失败后,由YARN重新启动
任务失败后,MRAppMaster重新申请资源



作者:topwqp
链接:http://www.jianshu.com/p/9cf41d655869
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值