Hadoop2.0资源调度框架Yarn基本概念与总体结构

前言

Hadoop1.0咱们讲他们的两个核心组件即MapReduce与HDFS,那么到了2.0之后它的核心应该就是Yarn与HDFS,当中的MapReduce就仅仅只是Hadoop当中的一个计算框架了,即MapReduce运行在Yarn(可以把它当做一个操作系统)上,同样其他的计算框架,包括storm,spark,flink,hive等都可以运行再Yarn之上。

Hadoop1.0和Hadoop2.0

通过上面两张图可以看出来,Hadoop1.0即不存在Yarn这么一个资源框架,那么在2.0当中Hadoop就多出了一个Yarn这么东西。那么多出来的东西是干什么呢?以及1.0又是怎么运算呢?

  • Hadoop1.0 MapReduce即通过JobTracker这么一个资源管理任务协调组件来完成整个hadoop当中对TaskTracker组件的Job任务进行资源分配与任务协调工作。相当于JobTracker组件即需要对job任务的资源分配,还需要对Job任务的协调,即MapReduce1.0是一个计算框架,也是一个资源调度框架,工作相当的繁重。

  • Hadoop2.0即通过抽离出Yarn这么一个资源调度框架,把JobTracker分解为ResourceManager与ApplicationMaster,然后TaskTracker对应NodeManager。另外Yarn当中不止可以运行MapReduce作业还可以运行其他计算框架的作业如Spark等,相当于插拔式的方式为计算框架提供资源分配,任务协调。即它存粹的是一个资源管理调度框架,而不是一个计算框架。被玻璃出来的MapReduce就变成了MRv2(MapReduce2.0)一个存粹的计算框架,不再自己负责资源调度管理服务,而是由Yarn为其提供资源管理调度服务

Yarn的体系结构

  • ResourceManager(RM)

    • RM处理客户端请求,接收JobSubmitter提交的作业,按照作业的上下文(Context)信息以及从NodeManager收集到的各节点资源的状态信息,启动调度过程分配一个Container作为ApplicationMaster(运行在NodeManager,由ResourceManager告知NodeManager负责启动),(另外会有一个ApplicationManager负责监控重启AM)
    • RM拥有为系统所有Job任务的资源分配的决定权,是中心服务,做的事情就是调度,资源分配,把集群中的资源已Container容器的形式进行分配给提出申请的应用程序,容器的通常选择会考虑应用程序所要处理的数据所在的位置,就近选择,从而实现计算向数据靠拢,减少网络开销
    • 容器(Container)作为资源的分配单位,主要包含一定数量的CPU,内存。
    • 与运行中每个节点上的NodeManager进行通讯交互(心跳的方式)监控NodeManager运行状态资源使用状态
    • 与运行中的所有ApplicationMaster进行通讯交互(心跳的方式)监控每个Job的运行情况
    • RM Scheduler(默认FIFO)
      • FIFO:排队形式 first in first out
      • Faire公平调度:简单理解就是会有这么以这个pool资源此,最低下限会保证任务启动
      • CapacityScheduler:简单理解就是分等级的FIFO
  • ApplicationManager(AM)

    • 当用户作业提交时,ApplicationMaster与ResourceManager协商获取资源,ResourceManager会以容器的形式为ApplicationMaster分配资源,每一个应用程序都会有一个ApplicationMaster,运行在RM机器之外
    • 负责一个Job任务的生命周期,包括申请资源,通过NodeManager启动任务,然后在把从ResourceManager申请到的资源告知NodeManager,由NodeManager帮忙启动对应的Container(即task任务)
    • 与NM协同工作与Scheduler协商合适的Container进行Container的监控
    • 定时向ResourceManager发送“心跳”消息,报告资源的使用情况和应用的进度信息
    • 当作业完成时,ApplicationMaster向ResourceManager注销容器,执行周期完成
  • NodeManager(NM)

    NodeManager主要负责管理抽象的容器,只处理与容器相关的事情,而不具体负责每个任务(Map任务或Reduce任务)自身状态的管理,因为这些管理工作是由ApplicationMaster完成的,ApplicationMaster会通过不断与NodeManager通信来掌握各个任务的执行状态

    • 接收并处理来自ApplicationMaster的Container启动、停止等各种请求
    • 负责启动应用程序的Container(执行应用程序的容器),并监控他们的资源使
      用情况(CPU、内存、磁盘和网络),并报告给RM
    • 总的来说,在单节点上进行资源管理和任务管理

Yarn的工作流程

以下为Spark运行在Yarn之上一个简单的流程,主要包含提交任务,申请资源,计算。

  • Client请求Resource Manager运行一个Application Master实例(step 2)
  • Resource Manager选择一个Node Manager,启动一个Container并运行Application Master实例(step 3a、step 3b);
  • Application Master根据实际需要向Resource Manager请求更多的Container资源(step 4);
  • Application Master通过获取到的资源再想NodeManager申请启动Container资源执行分布式计算(step 5a、step 5b)

总结

总体而言,YARN相对于MapReduce1.0来说具有以下优势:大大减少了承担中心服务功能的ResourceManager的资源消耗ApplicationMaster来完成需要大量资源消耗的任务调度和监控多个作业对应多个ApplicationMaster,实现了监控分布化

MapReduce1.0既是一个计算框架,又是一个资源管理调度框架,但是,只能支持MapReduce编程模型。而YARN则是一个纯粹的资源调度管理框架,在它上面可以运行包括MapReduce在内的不同类型的计算框架,只要编程实现相应的ApplicationMaster

YARN中的资源管理比MapReduce1.0更加高效以容器为单位,而不是以slot为单位

Hadoop2.7.2集群安装

分享到 评论