Hadoop2.x: HA

来源:互联网 发布:淘宝提前收款怎么开通 编辑:程序博客网 时间:2024/05/17 01:07
HDFS1.x存在问题:
NameNode单点故障,压力过大内存受限,影响系统扩展
MapReduce缺点:
  • JobTracker容易引起单点故障
  • JobTracker既要负责资源管理,又要进行作业调度
  • 当mapreduce job非常多的时候,会造成很大的内存开销,在Tasktracker端,以mapreduce task的数目作为资源的表示过于简单,如果两个大内存消耗的task被调度到一起,很容易出现OOM
  • 在Tasktracker端,把资源强制划分为map task slot和reduce task slot,当系统中只有map task或只有reduce task的时候,会造成资源的浪费
MRv1的资源管理分配模型是基于槽位的,槽位是一个相当粗粒度的系统资源单位,一个槽位是系统一定cpu、内存、网络、IO等资源的抽象一个Slot只能启动一个Task,关键的是一个Task未必用完一个Slot所对应的系统资源,但是它又占着不给别的Task使用,这就造成了浪费。另外,在MRv1中Slot还被分为了Reduce Solt和Map SlotReudce solt只能启动Reduce Task,Map Slot只能启动Map TaskYarn的资源抽象单位container是细粒度的,而且是动态的

Hadoop2.x由HDFS、Mapreduce、Yarn三个分支组成
1)HDFS:NN Federation、HA
2)Mapreduce:运行在Yarn上的MR
3)Yarn:资源管理系统
基于Zookeeper自动切换方案:
Zookeeper Failover Controller:监控NameNode的监控状态,并向Zookeeper注册NameNode

NameNode挂掉后,ZKFS作为Namenode的竞争锁,获取ZKFS锁的NameNode变为active


Yarn架构
1)ResourceManager:包含两个组件,调度器(Scheduler)和应用管理器ASM,RM是一个中心的服务,他做的事情就是调度、启动每个job所属的ApplicationMaster,另外监控ApplicationMaster的存在情况
2)NodeManager:每个节点上的框架代理,主要负责启动应用所需的容器,监控资源(内存,cpu,网络等)的使用情况并将之汇报给调度器
3)ApplicationsMaster:主要负责接受作业,协商获取第一个容器用于执行的AM和提供重启的失败的AM container的服务
4)ApplicationMaster负责每个job声明周期内的所有工作,类似老框架的JobTracker,但每个job(不是每种)都有一个ApplicationMaster,他可以运行在RM以外的机器上
5)ContainerContainer是Yarn中对系统资源的抽象,同时它也是系统资源分配的基本单位,它封装节点上多维度资源,其中包括CPU、内存、磁盘、网络等。Yarn会为每个任务分配一个Container,并且该任务只能够使用该Container中所描述的资源。值得关注的的是,Yarn中的Container和MRv1中的Slot是完全不同的,Container是一个动态的资源划分单位,它是根据实际提交的应用程序所需求的资源自动生成的,换句话说,Container其里边所描述的CPU、内存等资源是根据实际应用程序需求而变的。而Slot是一个静态的资源抽象单位,每一个同类型的Slot所描述的资源信息都是一样的

Yarn工作流
    当用户给Yarn提交了一个应用程序后,Yarn的主要工作流程如下图:
  • 步骤1,用户向Yarn提交应用程序,其中包括用户程序、相关文件、启动ApplicationMaster命令、ApplicationMaster程序等。
  • 步骤2,ResourceManager为该应用程序分配第一个Container,并且与Container所在的NodeManager通信,并且要求该NodeManager在这个Container中启动应用程序对应的ApplicationMaster
  • 步骤3,ApplicationMaster首先会向ResourceManager注册,这样用户才可以直接通过ResourceManager查看到应用程序的运行状态,然后它为准备为该应用程序的各个任务申请资源,并监控它们的运行状态直到运行结束,即重复后面4~7步骤。
  • 步骤4,ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源
  • 步骤5,一旦ApplicationMaster申请到资源后,便会与申请到的Container所对应的NodeManager进行通信,并且要求它在该Container中启动任务
  • 步骤6,任务启动。NodeManager为要启动的任务配置好运行环境,包括环境变量、JAR包、二进制程序等,并且将启动命令写在一个脚本里,通过该脚本运行任务。
  • 步骤7,各个任务通过RPC协议向其对应的ApplicationMaster汇报自己的运行状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以再任务运行失败时重启任务。
  • 步骤8,应用程序运行完毕后,其对应的ApplicationMaster会向ResourceManager通信,要求注销和关闭自己
YARN容错性
ResourceManager
 存在单点故障;
 正在基于ZooKeeper 实现HA 。
NodeManager
 失败后,RM 将失败任务告诉对应的AM ;
 AM 决定如何处理失败的任务。
ApplicationMaster
 失败后,由RM 负责重启;
 AM 需处理内部任务的容错问题;
 RMAppMaster 会保存已经运行完成的Task ,重启后无需重新运行

运行在YARN上的计算框架
 离线计算框架:MapReduce
DAG 计算框架:Tez
 流式计算框架:Storm
 内存计算框架:Spark





0 0
原创粉丝点击