大数据基础:Hadoop之Yarn重点架构原理

文章目录

Hadoop之Yarn重点架构原理

一、Yarn介绍

二、Yarn架构

三、Yarn任务运行流程

四、Yarn三种资源调度器特点及使用场景


Hadoop之Yarn重点架构原理

一、Yarn介绍

Apache Hadoop Yarn(Yet Another Reasource Negotiator,另一种资源协调者)是Hadoop2.x版本后使用的资源管理器,可以为上层应用提供统一的资源管理平台。

二、Yarn架构

Yarn主要由ResourceManager、NodeManager、ApplicationMaster、Container组成。

  • ResourceManager

ResourceManager是Yarn集群中的中央管理器,负责整个集群的资源分配与调度。ResourceManager负责监控NodeManager节点状态、汇集集群资源,处理Client提交任务的资源请求,为每个Application启动AppliationMaster并监控。

  • NodeManager

NodeManager负责管理每个节点上的资源(如:内存、CPU等)并向ResourceManager报告。当ResourceManager向NodeManager分配一个容器(Container)时,NodeManager负责启动该容器并监控容器运行,此外,NodeManager还会接收AplicationMaster命令为每个Application启动容器(Container)。

  • ApplicationMaster

每个运行在Yarn中的应用程序都会启动一个对应的ApplicationMaster,其负责与ResourceManager申请资源及管理应用程序任务。ApplicationMaster本质上也是一个容器,由ResourceManager进行资源调度并由NodeManager启动,ApplicationMaster启动后会向ResourceManager申请资源运行应用程序,ResourceManager分配容器资源后,ApplicationMaster会连接对应NodeManager通知启动Container并管理运行在Container上的任务。

  • Container

Container 容器是Yarn中的基本执行单元,用于运行应用程序的任务,它是一个虚拟环境,包含应用程序代码、依赖项及运行所需资源(内存、CPU、磁盘、网络)。每个容器都由ResourceManager分配给ApplicationMaster,并由NodeManager在相应的节点上启动和管理。容器的资源使用情况由NodeManager监控,并在必要时向ResourceManager报告。

Yarn核心就是将MR1中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现,ResourceManager负责整个集群的资源管理和调度;ApplicationMaster负责应用程序任务调度、任务监控和容错等。

三、Yarn任务运行流程

  1. 在客户端向Yarn中提交MR 任务,首先会将MR任务资源(Split、资源配置、Jar包信息)上传到HDFS中。

  2. 客户端向ResourceManager申请启动ApplicationMaster。

  3. ResourceManager会选择一台相对不忙的NodeManager节点,通知该节点启动ApplicationMaster(Container)。

  4. ApplicationMaster启动之后,会从HDFS中下载MR任务资源信息到本地,然后向ResourceManager申请资源用于启动MR Task。

  5. ResourceManager返回给ApplicationMaster资源清单。

  6. ApplicationMaster进而通知对应的NodeManager启动Container

  7. Container启动之后会反向注册到ApplicationMaster中。

  8. ApplicationMaster 将Task任务发送到Container 运行,Task任务执行的就是我们写的代码业务逻辑。

四、Yarn三种资源调度器特点及使用场景

  • FIFO调度器(First-In-Fist-Out Scheduler),Yarn中最简单的调度器。FIFO Scheduler 会将提交的应用程序按提交顺序放入一个先进先出的队列中,进行资源分配时,先给队列中最头上的应用分配资源,待头上的应用资源需求满足后再给下一个应用分配资源,以此类推。这种调度器调度资源时,有可能某个资源需求大的应用占用所有集群资源,从而导致其他的应用被阻塞。

  • Capacity调度器(Capacity Schduler)是Yarn中默认配置的资源调度器,允许多租户安全地共享一个大型集群。Capacity调度器中,支持配置多个资源队列,可以为每个资源队列指定最低、最高可使用的资源比例,在进行资源分配时,优先将空闲资源分配给“实际资源/预算资源”比值最低的队列,每个资源队列内部采用FIFO调度策略。

  • Fair调度器(Fair Scheduler)是一个将Yarn资源公平的分配给各个Application的资源调度方式,这种调度方式可以使所有Application随着时间的流逝可以获取相等的资源份额,其设计目标就是根据定义的参数为所有的Application分配公平的资源。

Yarn中FIFO、Capacity、Fair三种资源调度器区别对比如下:

Yarn资源调度器 特点 适用场景
FIFO调度器

1、简单易懂,无需额外配置。

2、应用按照提交的先后顺序(先进先出)运行。

3、不适合共享集群,每个应用必须等待直到轮到自己运行。

非共享集群,对任务执行顺序要求不高的场景。生产环境一般不用。

Capacity调度器

(开源Yarn默认使用)

1、允许多个组织共享集群资源,每个组织拥有专门的队列。

2、支持队列的层次划分,以及队列资源的灵活配置。

3、可以限制队列的最大容量,缓解资源竞争。

共享集群的场景,多个组织或团队共享同一集群资源的情况。

Fair调度器

(CDH默认使用)

1、公平地为所有运行的应用分配资源,支持多个队列间的资源公平共享。

2、支持动态创建队列,并通过一套规则系统确定应用的放置位置。

3、支持资源的抢占功能,确保资源的公平分配。

1、 多个用户或组织在共享集群中需要公平地获得资源的场景。

2、 对队列级别的资源控制和细粒度调度策略要求较高的环境。


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

相关推荐

  1. HadoopHDFS重点架构原理简介

    2024-07-12 06:18:03       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 06:18:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 06:18:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 06:18:03       58 阅读
  4. Python语言-面向对象

    2024-07-12 06:18:03       69 阅读

热门阅读

  1. vscode gitee问题

    2024-07-12 06:18:03       25 阅读
  2. DBA 数据库管理 . 内连接.外链接

    2024-07-12 06:18:03       22 阅读
  3. CentOS搭建FTP服务器教程

    2024-07-12 06:18:03       26 阅读
  4. 自动优化:SQL Server数据库自动收缩配置指南

    2024-07-12 06:18:03       26 阅读
  5. 数据结构第20节 快速排序以及优化

    2024-07-12 06:18:03       27 阅读
  6. 力扣 1两数之和

    2024-07-12 06:18:03       26 阅读
  7. Elasticsearch基础教程

    2024-07-12 06:18:03       22 阅读
  8. 分享WPF的UI开源库

    2024-07-12 06:18:03       28 阅读
  9. C# —— 数组的告诫查询方法

    2024-07-12 06:18:03       26 阅读
  10. 内网、外网通信的底层实现

    2024-07-12 06:18:03       23 阅读
  11. 什么是XSS跨站脚本攻击

    2024-07-12 06:18:03       25 阅读