【大数据2025】Yarn 总结

分布式资源管理系统讲解总结

一、引言

  • 围绕分布式资源管理系统展开,重点涵盖 Yarn 的简介、原理、资源调度策略以及运维和管理,旨在让学员全面掌握相关知识。
  • Yet Another Resource Negotiator

二、Yarn 诞生背景

  • 在 Hadoop 1.X 中仅有 HDFS 和 MapReduce 两个框架,HDFS 负责存储,MapReduce 兼具计算与资源管理双重职能,负责将计算任务调度到 HDFS 数据存储节点。

三、MapReduce 架构及问题 (Hadoop 1.x)

在这里插入图片描述

  • 架构:采用主从架构,主节点为 job tracker,从节点是 task tracker。客户端向 job tracker 提交作业请求,job tracker 在数据节点申请 CPU 和内存等资源,作业在申请到的资源中运算,并向 job tracker 汇报,任务完成后释放资源。
  • 问题
    • 单点故障率高:job tracker 管理任务繁重,既要管理资源分配又要管理作业,任务量大时易超负荷挂掉,且无高可用机制,一旦挂掉整个集群瘫痪。
    • 资源描述模型简单:仅依据 task 数量分配固定资源,未考虑 CPU 和内存实际需求,导致资源浪费和任务运行效率低下,并且强制拆分资源为 map 和 reduce,无法兼容其他计算框架,通用性差。

四、Yarn 介绍及解决问题方式

  • Yarn 是分布式通用资源管理系统,处于通用计算和数据存储中间位置。
  • 解决了 MapReduce 的问题,使资源调度更精细且通用性增强,可调度多种计算框架作业到 HDFS 运行,同时对 MapReduce 单点故障率高的问题也有相应解决措施(后续内容应会提及具体架构优化方式)。

在这里插入图片描述


在这里插入图片描述

主从架构

  • 架构组成:主节点为 resource manager,负责资源管理;从节点是 node manager,所有 node manager 地位平等,无层级管理关系。
  • 单点故障解决方案:采用热备节点(stand by),当活跃主节点(active)故障时,热备节点可接替工作,减轻单点故障风险,但未完全解决问题。进一步通过将作业管控工作从主节点分离来分散压力。

作业管理机制

在这里插入图片描述

  • 作业提交与资源分配:客户端向 resource manager 提交作业,后者在 node manager 中为作业分配资源(包括 CPU、内存、环境变量等),并分装到 container 中。首次提交作业通常分配一个 container 用于运行作业的管理进程 application master
  • 作业解析与资源再申请:application master 运行后解析作业,若需更多资源则向 resource manager 申请,resource manager 再次分配 container 给 application master。
  • 任务分发与运行监控:application master 获得资源后将作业 task 分发到 container 中运行,task 实时向 application master 汇报状态,若有 task 故障,application master 会尝试重启。
  • 资源释放与作业完成:当 application master 检测到所有 task 运行完毕,向 resource manager 申请释放资源,resource manager 释放相关 container,作业执行流程结束。

架构通用性

  • 该架构具有通用性,客户端可提交 map reduce 作业、spark 作业或自行编写的 job。只要任务实现 application master 接口,就能在集群中运行。例如 spark 作业提交后,同样先由 resource manager 分配 container 运行其 application master,后续流程类似其他作业,由 application master 自主解析任务、申请资源、分发 task 并监控运行。

高可用机制总结

在这里插入图片描述

一、多主节点与状态管理架构

  • 架构组成:高可用架构由多台主节点构成,其中一台主节点处于 active 管理状态,其余为 stand by 热备状态。
  • 状态决策机制:主节点间状态由 zookeeper 管控。zookeeper 主节点中选定管理节点并设为 active,当 active 节点故障,zk 会将其 resource manager 状态降为 stand by,并从 stand by 节点中选新管理主节点升级为 active,确保管理连续性。

二、元数据同步策略

hdfs 同步方式:在 hdfs 中,原数据通过 journal node 集群实现同步,保障数据一致性与完整性,使新 active 节点获取最新原数据管理集群。

  • Yarn 同步方式:Yarn 系统将元数据置于 zk 内,standby 节点可从中获取并同步,同步完成后经 ZK 切换为 active 进行集群管理,简化同步流程。

三、主从切换对任务的影响及应对操作

  • 任务阻塞现象:主从切换期间,集群运行任务会阻塞,直至新 active 状态的 resource manager 选出才继续执行,防止数据不一致与错误操作。
  • 命令操作功能:利用 yarn rmadmin 加参数可执行高可用操作,如获取节点状态,超级管理员可强制切换节点状态(stand by 转 active 或反之),便于灵活调整集群架构。

在这里插入图片描述


YARN 资源调度策略总结

YARN 作为重要的资源管理框架,其资源调度策略对任务执行效率影响重大。主要包括 FIFO、容量调度和公平调度三种策略。

一、FIFO 调度策略

在这里插入图片描述

  • 核心机制:采用单队列架构,任务依提交顺序依次执行。先提交的作业会独占集群全部资源运行,后续作业需等待前面作业完成才能获取资源启动。
  • 缺陷分析:对紧急且执行时间短的小任务极不友好。例如,若紧急小任务在大任务之后提交,即便其所需执行时间很短,也会因 FIFO 规则而长时间等待,可能错过最佳执行时机,严重影响系统对多样化任务的处理效率。

二、容量调度策略

在这里插入图片描述

  • 核心原理
    • 基于多队列设计理念,将集群资源预先分配给不同队列。如划分队列 A 用于处理大作业,分配集群 80%资源;队列 B 用于处理紧急小作业,分配 20%资源。作业提交时按类型进入相应队列获取资源运行,各队列作业可并行处理。
    • 每个队列资源占比并非绝对固定,可设置最大资源占用量。例如,可配置队列 B 在特定情况下(如队列 A 空闲时)最大可占用集群 100%资源,有效避免资源闲置浪费。
  • 配置要点
    • 在配置文件(如 yarn-site.xml)中需指定使用容量调度器。
    • 借助自定义配置文件详细设定各队列及子队列资源占比等参数。如在根队列下创建队列 A、B,并可在队列 A 下进一步设置子队列 A1、A2,同时明确各队列资源分配比例(如队列 A 占 80%,队列 B 占 20%,队列 A1 占队列 A 资源的 40%,队列 A2 占 60%等)。
      在这里插入图片描述

三、公平调度策略

在这里插入图片描述

  • 核心原则 见面分一半
    • 同样采用多队列架构,但队列间无预设固定资源占比,资源分配遵循公平原则。默认新任务提交时,若已有任务占用资源,会让出部分资源给新任务,使各队列按公平方式共享集群资源。例如,作业一提交至空闲队列 A 可占用全部资源,作业二提交后,队列 A 会在作业二执行前让出一半资源给作业二;队列内部也遵循类似机制。
    • 虽默认按公平方式分配资源,但在实际生产中,由于各队列任务资源需求差异,可通过调整队列权重实现灵活分配。默认每个队列权重为 1,若某队列需更多资源,可提升其权重。如将某队列权重设为 2,则该队列在资源分配时将获取更多比例资源,以满足不同任务对资源的实际需求。

在这里插入图片描述

  • 配置步骤
    • 首先在全局配置中选定公平调度器。
    • 然后在自定义配置环节针对不同队列设置权重等关键参数。例如,设置 sample query 队列权重为 2,确保公平调度器能根据实际业务场景进行合理资源调配。

YARN 运维

  • 作业查看与管理命令
    • 使用“yarn application -list”可查看集群中所有作业的 ID;
    • “yarn application -status”用于查看作业运行状态;找到作业 ID 后,
    • 用“yarn application -kill”能终止作业。

YARN 监控

在这里插入图片描述

  • 集群监控:默认端口是 8088,在此端口可查看整个集群的监控信息,如服务器数量、节点状态(例如有四个从节点处于 running 状态)、内存使用量以及 call 使用量等。
  • 作业监控:在监控界面左侧点击“applications”可进入作业监控界面,能查看集群中作业的运行和完成情况。

yarn 命令

一、资源管理命令

  1. yarn node -list

    • 功能:列出 YARN 集群中的节点信息。
    • 示例
      yarn node -list
      
    • 解释:该命令将显示 YARN 集群中所有节点的详细信息,包括节点的地址、节点的状态(如 RUNNING、DECOMMISSIONED、LOST 等)、节点的资源容量(如 CPU 核心数、内存大小)、已使用的资源量、剩余可用资源量等。这对于查看集群资源的整体使用情况非常有用。
  2. yarn queue -status <queue-name>

    • 功能:查看指定队列的状态信息。
    • 示例
      yarn queue -status default
      
    • 解释:YARN 中的队列用于管理资源分配,不同的应用程序可以提交到不同的队列中,以实现资源的隔离和调度。此命令可查看指定队列(如示例中的 default 队列)的资源使用情况,包括该队列已使用的资源、可用资源、等待运行的应用程序数量、正在运行的应用程序数量等。
  3. yarn application -list

    • 功能:列出 YARN 中正在运行的应用程序。
    • 示例
      yarn application -list
      
    • 解释:显示 YARN 集群中当前正在运行的所有应用程序的信息,如应用程序的 ID、名称、用户、启动时间、状态(如 RUNNING、ACCEPTED、FINISHED 等)、应用程序类型(如 MapReduce、Spark 等)以及应用程序占用的资源情况。

二、应用程序管理命令

  1. yarn application -kill <application-id>

    • 功能:终止指定的 YARN 应用程序。
    • 示例
      yarn application -kill application_12345_6789
      
    • 解释:通过提供应用程序的唯一 ID(如 application_12345_6789),可以终止该应用程序。这在需要停止某个长时间运行的异常应用程序或测试时需要强制结束某个应用程序时非常有用。
  2. yarn application -status <application-id>

    • 功能:查看指定应用程序的状态。
    • 示例
      yarn application -status application_12345_6789
      
    • 解释:该命令将给出应用程序的详细状态信息,包括应用程序的最终状态(如 SUCCEEDED、FAILED、KILLED 等)、运行进度(如果适用)、分配给该应用程序的容器信息(容器的数量、使用的资源等)、应用程序日志的 URL 等。

三、集群维护命令

  1. yarn rmadmin -getServiceState <service-name>

    • 功能:获取 YARN 服务的状态。
    • 示例
      yarn rmadmin -getServiceState ResourceManager
      
    • 解释:可以检查 YARN 服务(如 ResourceManager)的状态,以确定服务是否正常运行,服务状态可以是 ACTIVE、STANDBY 等。
  2. yarn rmadmin -refreshQueues

    • 功能:刷新队列配置。
    • 示例
      yarn rmadmin -refreshQueues
      
    • 解释:当修改了 YARN 的队列配置文件(如 capacity-scheduler.xml)后,使用此命令可以使新的队列配置生效,而无需重启 YARN 服务。

四、日志管理命令

  1. yarn logs -applicationId <application-id>
    • 功能:查看指定应用程序的日志。
    • 示例
      yarn logs -applicationId application_12345_6789
      
    • 解释:对于故障排除和监控,此命令允许查看特定应用程序的日志,包括应用程序运行时的标准输出和标准错误输出。可以帮助开发人员和管理员找出应用程序失败或性能不佳的原因。

五、容量调度器相关命令

  1. yarn schedulerconf -list
    • 功能:列出 YARN 容量调度器的配置信息。
    • 示例
      yarn schedulerconf -list
      
    • 解释:对于使用 YARN 容量调度器的集群,此命令可以显示调度器的配置信息,如队列的容量、最大容量、最小用户限制、队列之间的资源分配策略等。

六、YARN 集群信息查看命令

  1. yarn cluster -info
    • 功能:显示 YARN 集群的总体信息。
    • 示例
      yarn cluster -info
      
    • 解释:该命令会提供关于 YARN 集群的一些基本信息,例如 ResourceManager 的地址、Web 界面的 URL、集群的版本信息、集群的资源总容量等。

这些 YARN 命令可以帮助你在大数据环境中进行资源管理、应用程序管理、集群维护和故障排除等操作,在面试中熟悉这些命令可以展示你对 YARN 资源管理框架的操作能力和理解。根据不同的场景和需求,灵活使用这些命令可以更好地管理和维护 YARN 集群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/4147.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务学习:基础理论

一、微服务和应用现代化 1、时代的浪潮&#xff0c;企业的机遇和挑战 在互联网化数字化智能化全球化的当今社会&#xff0c;IT行业也面临新的挑战&#xff1a; 【快】业务需求如“滔滔江水连绵不绝”&#xff0c;企业需要更快的交付【变】林子大了&#xff0c;百色用户&…

python+django+Nacos实现配置动态更新-集中管理配置(实现mysql配置动态读取及动态更新)

一、docker-compose.yml 部署nacos服务 version: "3" services:mysql:container_name: mysql# 5.7image: mysql:5.7environment:# mysql root用户密码MYSQL_ROOT_PASSWORD: rootTZ: Asia/Shanghai# 初始化数据库(后续的初始化sql会在这个库执行)MYSQL_DATABASE: nac…

【专题二 二叉树中的深搜】98. 验证二叉搜索树

1.题目解析 2.讲解算法原理 二叉搜索树的中序遍历是一个有序序列 1.使用全局变量的优势 2.回溯 3.剪枝 左子树是二叉搜索树当前节点符合二叉搜索树的定义右子树是一个二叉搜索树 3.编写代码 /*** Definition for a binary tree node.* public class TreeNode {* in…

Reactor 模式在 Edis、Nginx 和 Netty 中的应用与高性能网络模式解析

文章目录 参考文章Reactor 模式在 Edis、Nginx 和 Netty 中的应用与高性能网络模式解析一、Reactor 模式二、Redis 中的 Reactor 模式三、Nginx 中的 Reactor 模式四、Netty 中的 Reactor 模式五、Reactor 模式的优势六、总结 参考文章 redis&#xff0c;nginx&#xff0c;net…

C++,设计模式,【目录篇】

文章目录 1. 简介2. 设计模式的分类2.1 创建型模式&#xff08;Creational Patterns&#xff09;&#xff1a;2.2 结构型模式&#xff08;Structural Patterns&#xff09;&#xff1a;2.3 行为型模式&#xff08;Behavioral Patterns&#xff09;&#xff1a; 3. 使用设计模式…

深度学习 Pytorch 基本优化思想与最小二乘法

在正式开始进行神经网络建模之前&#xff0c;我们还需要掌握pytorch中最核心的基础数学工具——autograd(自动微分)模块。虽然对于任何一个通用的深度学习框架都会提供许多自动优化的算法和现成的loss function&#xff0c;但如果想更深入理解神经网络&#xff0c;对深度学习的…

word转pdf

依赖 先安装好MAVEN https://blog.csdn.net/m0_62214280/article/details/140643392 链接&#xff1a;https://pan.baidu.com/s/1jISO-TPEyLgC8RTmMJGRQw 提取码&#xff1a;9ju8 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words…

【多线程】线程池

一、什么是线程池 线程池&#xff08;Thread Pool&#xff09;是一种多线程并发执行的设计模式&#xff0c;它通过维护一个线程集合来执行多个任务&#xff0c;避免频繁地创建和销毁线程&#xff0c;提高系统性能和响应速度。 就好比如你经营了一家餐饮店&#xff0c;你名下有…

【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件

&#x1f525; 目录 1. 控件概述 控件体系的发展阶段 2. QWidget 核心属性 2.1 核心属性概览2.2 用件可用&#xff08;Enabled&#xff09; 2.3 坐标系&#xff08;Geometry&#xff09; **实例 1: 控制按钮的位置**实例 2: 表白 程序 2.4 窗口标题&#xff08;windowTiltle&a…

CSS 合法颜色值

CSS 颜色 CSS 中的颜色可以通过以下方法指定&#xff1a; 十六进制颜色带透明度的十六进制颜色RGB 颜色RGBA 颜色HSL 颜色HSLA 颜色预定义/跨浏览器的颜色名称使用 currentcolor 关键字 十六进制颜色 用 #RRGGBB 规定十六进制颜色&#xff0c;其中 RR&#xff08;红色&…

C++第十五讲:异常

C第十五讲&#xff1a;异常 1.异常的概念和使用1.1异常的抛出和捕获1.2异常抛出和捕获的注意事项1.3异常的重新抛出1.4异常规范 2.标准库的异常 1.异常的概念和使用 1.1异常的抛出和捕获 异常的抛出和捕获的过程分为三个阶段&#xff1a; 1.异常的抛出&#xff1a; 使用throw对…

HTML<bdo>标签

例子 指定文本方向&#xff1a; <bdo dir"rtl"> This text will go right-to-left. </bdo> <!DOCTYPE html> <html> <body> <h1>The bdo element</h1> <p>This paragraph will go left-to-right.</p> …

Git:问题解决办法 及 Tips 总结

目录 查看历史记录及比较区别查看所有提交的历史记录查看提交的详细历史记录查看提交之间的差异点击文件操作历史&#xff0c;筛选出所有改动过此文件的提交任意两个提交之间的比较&#xff08;开发及查BUG常用&#xff09; 在需要版本回滚的情况下处理方法短时间内无法彻查BUG…

uniApp开通uniPush1.0个推,SpringBoot集成uniPush1.0个推

uniApp开通unipush1.0个推&#xff0c;SpringBoot程序集成 一、APP开通unipush1.0个推(商户App源码仅支持1.0个推) 1.app模块配置开通推送 2.应用开通推送 3.开通后点击消息推送菜单会看到如下页面 完成以上步骤后 此时android 仅支持在线推送。 4.配置各厂商离线推送 暂未…

[JavaScript] 深入理解流程控制结构

文章目录 1. **if-else 语句**基本语法&#xff1a;示例&#xff1a;扩展&#xff1a;else if 2. **switch-case 语句**基本语法&#xff1a;示例&#xff1a;注意事项&#xff1a; 3. **for 循环**基本语法&#xff1a;示例&#xff1a;扩展&#xff1a;for-in 和 for-of 4. *…

庄小焱——2024年博文总结与展望

摘要 大家好&#xff0c;我是庄小焱。岁末回首&#xff0c;2024 年是我在个人成长、博客创作以及生活平衡方面收获颇丰的一年。这一年的经历如同璀璨星辰&#xff0c;照亮了我前行的道路&#xff0c;也为未来的发展奠定了坚实基础。 1. 个人成长与突破 在 2024 年&#xff0c…

八大排序--冒泡排序

目录 什么是冒泡排序&#xff1f; 算法步骤 举例说明 代码实现&#xff08;java&#xff09; 什么是冒泡排序&#xff1f; 冒泡排序&#xff08;英语&#xff1a;Bubble sort&#xff09;是一种简单的排序算法。由于在算法的执行过程中&#xff0c;较小的元…

新阿里云买服务器配置需手动配置80端口

新买阿里云服务器需手动配置80&#xff0c;端口才可以访问nginx CentOS系统 安装nginx 1. 安装 Nginx yum install nginx 2. 启动 Nginx 服务 systemctl start nginx 3. 修改默认网页 cd /usr/share/nginx/ echo "666" >index.html cat index.html 访问ngin最后…

如何下载对应城市的地理json文件

这里采用的是阿里地图工具进行查找&#xff1a; DataV.GeoAtlas地理小工具系列 由阿里云DataV数据可视化团队出品,多年深耕数据可视化领域,数据大屏业务开拓者和领航者。致力用震撼而清晰的视觉语言,让更多人读懂大数据,受惠数据驱动的决策方式 第一步打开网站 &#xff1a; …

“libcudart,so.1 1.0“ loss解决方案

sudo find /usr/ -name libcudart.so.11.0 2 > /dev/null参考链接&#xff1a;1、https://stackoverflow.com/questions/70967651/could-not-load-dynamic-library-libcudart-so-11-0 2、https://blog.csdn.net/weixin_43786241/article/details/109203995