分布式资源调度框架YARN

yarn的诞生和概念

yarn的前世今生

  • hadoop1.x版本中最大的问题是资源问题

    • 对数据的处理和资源调度主要依赖MapReduce完成,只能运行MapReduce程序
    • JobTracker负责资源管理和程序调度,压力较大,会带来一些问题
      • 运行速度变慢
      • 容易出现bug
  • hadoop2.x版本中添加yarn

    • 主要负责集群的资源管理,分担MapReduce压力

yarn概述

  • yarn(Yet Another Resource Negotiator)核心思想是将资源管理和任务的监控和调度分离
    • 通用的资源管理系统,可为不同的应用(MapReduce、Spark、Flink等)提供统一的资源管理和调度
    • 它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处

yarn的基本架构核心组件

yarn架构概念

  • yarn的架构是master/slaves的主从架构
    • master:ResourceManager->全局资源管理
      • 负责集群全局统一的资源管理、调度、分配
    • salve:NodeManager->节点资源管理
      • 启动了NodeManager进程的节点
      • 负责管理节点的资源及使用情况
  • yarn核心组件(包含ResourceManager和NodeManager)
    • ApplicationMaster
    • Container

yarn架构核心组件-ResourceManager

  • ResourceManager组成
    • ResourceScheduler->资源调度器,根据节点的容量、队列情况,为应用程序分配资源
    • Application Manager->应用程序管理器,负责接收/client端传输的job请求
  • ResourceManager功能
    • 处理客户端请求
    • 监控Nodemanager
    • 启动和监控ApplicationMaster,进行必要的重启
    • 整个系统的资源分配和调度

yarn架构核心组件-NodeManager

  • NodeManager功能
    • 本节点上资源管理和任务管理
    • 定时向ResourceManager汇报本节点上的资源使用情况和各个Container的运行情况
    • 接收和处理来自ResourceManager的Container启动和停止的各种命令
    • 处理来自ApplicationMaster的指令,比如启动MapTask和ReduceTask指令

yarn架构核心组件-ApplicationMaster

  • ApplicationMaster功能
    • 每个应用程序对应一个ApplicationMaster,负责单个应用程序的管理
    • 负责数据切分
    • 为应用程序向ResourceManager申请资源(Container),并分配内部任务(MapTask和ReduceTask)
    • 与NodeManager通信来启动/停止任务,Task都是运行在Container中的
    • 负责任务的监控和容错,当某些Task运行出错,进行容错处理

yarn架构核心组件-Container

  • Container是YARN中的资源抽象,封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等
  • Container类似于一个虚拟机,可以在上面执行任务

yarn的工作机制(图解)

分布式资源调度框架YARN

yarn的资源调度器

  • 目前hadoop作业调度器有三种
    • FIFO:先进先出调度器
      • 基于流和队列所做,它不是调度器,只是定义先做什么后做什么,不具备调度功能,但在1.0的时候就是用scheduler先进先出。队列的特点是,有一个人没走完队列就结束不了。是很大的瓶颈。
    • Capacity Scheduler:容量调度器
      • 1.5之后是容量调度器,跑到各个datanode节点,创建container,根据container和在datanode占用别的比例来分配。会频繁的通信。并不合适。
    • Fair Scheduler:公平调度器
      • 容量调度器的优化,会提前的把容量可能的使用情况计划好了,只要保证当前活着的节点尽量公平的分配资源。
  • 默认的作业调度器在yarn-0default.xml文件中可以查看
    • 属性:yarn.resourcemanager.scheduler.class
    • Hadoop版本2.6.0-cdh5.14.2的默认调度器是公平调度器

yarn常用命令

  • 任务管理
    • 查看正在运行的任务
      • yarn application -list
    • 杀死正在运行的任务
      • yarn application -kill 任务id
  • 节点管理
    • 查看节点列表
      • yarn node -list
    • 查看节点状态
      • yarn node -status 节点id