hadoop_yarn详解

YARN秒懂

YARN定义

YARN(Yet Another Resource Negotiator)是Hadoop的一个框架,它负责在Hadoop集群中调度工作,管理资源,并为用户提供运行各种类型的应用程序的环境

基础架构

ResourceManager

  1. 处理客户端请求
  2. 监控NodeManager
  3. 启动或监控ApplicationMater
  4. 资源的分配与调度

NodeManager

  1. 管理单个节点上的资源
  2. 处理来自ResourceManager的命令
  3. 处理来自ApplicationMaster的命令

ApplicationMaster

  1. 为应用程序申请资源并分配给内部的任务
  2. 任务的监控与容错

Container

  1. container是YARN中的资源抽象,封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等

工作流程

  1. 作业提交1-3

  2. 作业初始化4-7

  3. 任务分配8-9

  4. 任务运行10-13

  5. 进度和状态更新

     YARN中的任务将其进度和状态返回给应用管理器, 客户端每秒向应用管理器请求进度更新, 展示给用户
    
  6. 作业完成

     客户端除了向应用管理器请求作业进度外, 每5分钟会来检查作业是否完成
     作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查
    

资源调度器

FIFO Scheduler

First In First Out,单队列,根据作业的提交顺序执行任务

Capacity Scheduler

容量调度器,Apache hadoop3.2.3默认调度器,是Yahoo开发的多用户调度器

容量调度器特点

  1. 多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略
  2. 容量保证:管理员可为每个队列设置最低资源保证和资源使用上限
  3. 灵活性:如果一个队列中资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的任务提交,则其他队列借调的资源会归还给该队列
  4. 多租户:支持多用户共享集群和多应用程序同时进行,为防止同一个用户的作业独占资源,调度器会对同一个用户提交的作业所占资源进行限定

容量调度器资源分配算法

  • 队列资源分配

      从root用户开始,使用深度优先算法,优先选择资源占用率最低的队列分配资源
    
  • 作业资源分配

      默认按照提交作业的优先级和提交时间顺序分配资源
    
  • 容器资源分配

      按照容器的优先级分配资源;
      如果优先级相同,按照数据本地原则:(同HDFS机架感知策略)
      	1)任务和数据在同一节点
      	2)任务和数据在同一机架
      	3)任务和数据不在同一节点也不在同一机架
    

Fair Scheduler

公平调度器是Facebook开发的多用户调度器

公平调度器的特点

同队列所有任务共享资源,在时间尺度上获得公平的资源

与容量调度器的相同点

  1. 多队列:支持多队列作业,
  2. 容量保证:管理员可为每个队列设置最低资源保证和资源使用上限
  3. 灵活性:有剩余的资源可以暂时共享给那些需要资源的队列
  4. 多租户:支持多用户共享集群和多应用程序同时进行

与容量调度器的不同点

  • 核心调度策略不同

      容量调度器:优先选择资源利用率低的队列
      公平调度器:优先选择对资源缺额比例大的
    
  • 每个队列可以单独设置资源分配方式

      容量调度器:FIFO、DRF
      公平调度器:FIFO、FAIR、DRF
    

缺额

公平调度器的设计目标是:在时间尺度上,所有作业获得公平的资源。某一时刻一个作业应获资源和实际获取资源的差距叫"缺额"

公平调度器列队资源分配方式

  • FIFO策略

      公平调度器每个队列资源分配策略为FIFO时,此时公平调度器相当于容量调度器
    
  • FAIR策略

      Fair策略(默认)是一种基本最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源,无论有几个应用程序,平均分配当前的资源
      资源分配流程和容量调度器一致:
      	1)选择队列
      	2)选择作业
      	3)选择容器
      	每一步都按照公平策略分配资源
      	
      公平策略
      	
      	实际最小份额: mindshare = Min(资源需求量,配置的最小资源)
      	是否饥饿:    isNeedy = 资源使用量 < mindshare(实际最小份额)
      	资源分配比:   minShareRatio = 资源使用量 / Max(mindshare, 1)
      	资源使用权重比:useToWeigthRatio = 资源使用量 / 权重
    
  • DRF策略

      DRF(Dominant Resource Fairness),之前说的资源都是单一标准,比如只考虑内存(Yarn默认),但很多时候我们资源有很多种,
      例如内存、CPU等,DRF策略是对不同应用进行不同资源(内存和CPU)的合理比例分配
    

常用命令

8088端口查看的信息

  • 查看任务列表
bash 复制代码
yarn application -list
  • 查看任务状态
bash 复制代码
yarn application -status <applicationid>
  • 根据任务状态查询列表
bash 复制代码
yarn application -list -appStates <status>

<status>如下
  • 查看任务log
bash 复制代码
yarn logs -applicationId <applicationid>
  • 查看节点状态
bash 复制代码
yarn node -list -all
  • 查看队列状态
bash 复制代码
yarn queue -status default
相关推荐
szxinmai主板定制专家2 小时前
【国产NI替代】基于FPGA的32通道(24bits)高精度终端采集核心板卡
大数据·人工智能·fpga开发
TGB-Earnest3 小时前
【py脚本+logstash+es实现自动化检测工具】
大数据·elasticsearch·自动化
大圣数据星球5 小时前
Fluss 写入数据湖实战
大数据·设计模式·flink
suweijie7685 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
Data跳动11 小时前
Spark内存都消耗在哪里了?
大数据·分布式·spark
woshiabc11112 小时前
windows安装Elasticsearch及增删改查操作
大数据·elasticsearch·搜索引擎
lucky_syq12 小时前
Saprk和Flink的区别
大数据·flink
lucky_syq12 小时前
流式处理,为什么Flink比Spark Streaming好?
大数据·flink·spark
袋鼠云数栈12 小时前
深入浅出Flink CEP丨如何通过Flink SQL作业动态更新Flink CEP作业
大数据