原创 | 9张图详解Yarn的工作机制,惊艳阿里面试官

简介: 原创 | 9张图详解Yarn的工作机制,惊艳阿里面试官

我们知道 YARN 是 Hadoop 资源管理器,无论是 MapReduce 应用还是 Spark 应用,应该都会用到 Yarn。我们学习 Yarn 不仅为了应对工作,面试中也是一个高频考点,无论是阿里、字节还是美团等一线大厂的一面,都喜欢问这个知识点。


今天我们就来聊聊 Yarn 的组成以及工作流程:


先介绍几个角色


image.png


ResourceManager

一个集群只有一个 RM,它是 YARN 的总指挥,负责协调集群上的计算资源,它有以下两个组件:

  • ApplicationsManager:这个不是 ApplicationMaster,注意区分。它会接受 Job 的提交请求,调度 Container 用于启动 ApplicationMaster,以及负责 ApplicationMaster 的失败重启。
  • Scheduler:调度器纯粹为应用程序分配资源,它不会监控应用的状态,这里的调度就是基于 Container 这个抽象的资源容器,包含内存、CPU、磁盘、网络等。


NodeManager一个集群中有多个 NodeManager,它负责启动 Container,监控 Container 的资源使用情况(cpu、内存、磁盘、网络),并将这些信息汇报给 RM。一个 NodeManager 上可以有多个 Container。

ContainerContainer 是一组硬件资源的抽象,包含 CPU、内存、磁盘、网络等,所有的 Job 都是在 Container 中运行;

ApplicationMaster与 RM 协商资源,并与 NodeManager 一起监控任务,ApplicationMaster 和 Job 一样,都是运行在 Container 中。

下面我们详细了解下一个任务是怎么提交到 Yarn 中运行的。


image.png


第 1 步:Client 向 RM 发起任务请求:「RM,我要执行一个任务」


image.png


第 2 步:RM 给 Client 返回 Application ID 等信息:「好的,给你分配一个 Application ID」



image.png


第 3 步:Client 根据返回的信息,检查作业的输入输出目录是否正确、计算作业输入分片是否正常,将运行作业需要的资源(作业 Jar 文件、配置文件、输入分片)复制到以 Application ID 命名的 HDFS 目录中。



image.png


第 4 步:Client 向 RM 正式提交作业:「我都准备好了,执行任务吧」



image.png


第 5 步:RM 将请求信息传递给自己的小弟 Scheduler:「Scheduler 老弟,你来分配个 Container」

第 6 步:Scheduler 分配 Container,用于启动 ApplicationMaster:「好的,这个 Container 就是 0 号选手」第 7 步:ApplicationsManager 与指定的 NodeManager 通信,要求在 Container 中启动 ApplicationMaster。


image.png


第 8 步:ApplicationMaster 初始化任务并向 RM 申请所需要的资源:「RM 大哥,给我资源运行任务」



image.png


第 9 步:RM 返回 ApplicationMaster 申请的资源:「给你 1、2  两个 NodeManager」

第 10 步:ApplicationMaster 与对应的 NodeManager 通信,申请 Container 启动任务「NodeManager 大哥,给我启动 Container 运行这个任务」


image.png


第 11 步:Container 中的应用程序会先将需要的计算资源从 HDFS 下载到本地,再启动任务:「都给我跑起来」

第 12 步:运行过程中,任务会将状态和进度报告给 ApplicationMaster,Client 会轮询 ApplicationMaster 获取状态。第 13 步:运行完成后,Container 会注销掉,也就是把资源归还给系统,ApplicationMaster 向 RM 注销自己。

如果你已经坚持看到这里了,可以回到文章开头再看看 Yarn 的几个角色解释,加深理解。

你还想峰哥讲哪方面的知识点,欢迎留言~

相关文章
|
7月前
|
Python 开发工具
2024年Python最全使用Python实现音频双通道分离,2024年最新阿里p7面试难度
2024年Python最全使用Python实现音频双通道分离,2024年最新阿里p7面试难度
2024年Python最全使用Python实现音频双通道分离,2024年最新阿里p7面试难度
|
2月前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
18天前
|
存储 NoSQL 架构师
阿里面试:聊聊 CAP 定理?哪些中间件是AP?为什么?
本文深入探讨了分布式系统中的“不可能三角”——CAP定理,即一致性(C)、可用性(A)和分区容错性(P)三者无法兼得。通过实例分析了不同场景下如何权衡CAP,并介绍了几种典型分布式中间件的CAP策略,强调了理解CAP定理对于架构设计的重要性。
50 4
|
1月前
|
存储 NoSQL 算法
阿里面试:亿级 redis 排行榜,如何设计?
本文由40岁老架构师尼恩撰写,针对近期读者在一线互联网企业面试中遇到的高频面试题进行系统化梳理,如使用ZSET排序统计、亿级用户排行榜设计等。文章详细介绍了Redis的四大统计(基数统计、二值统计、排序统计、聚合统计)原理和应用场景,重点讲解了Redis有序集合(Sorted Set)的使用方法和命令,以及如何设计社交点赞系统和游戏玩家排行榜。此外,还探讨了超高并发下Redis热key分治原理、亿级用户排行榜的范围分片设计、Redis Cluster集群持久化方式等内容。文章最后提供了大量面试真题和解决方案,帮助读者提升技术实力,顺利通过面试。
|
1月前
|
SQL 关系型数据库 MySQL
阿里面试:1000万级大表, 如何 加索引?
45岁老架构师尼恩在其读者交流群中分享了如何在生产环境中给大表加索引的方法。文章详细介绍了两种索引构建方式:在线模式(Online DDL)和离线模式(Offline DDL),并深入探讨了 MySQL 5.6.7 之前的“影子策略”和 pt-online-schema-change 方案,以及 MySQL 5.6.7 之后的内部 Online DDL 特性。通过这些方法,可以有效地减少 DDL 操作对业务的影响,确保数据的一致性和完整性。尼恩还提供了大量面试题和解决方案,帮助读者在面试中充分展示技术实力。
|
2月前
|
消息中间件 存储 canal
阿里面试:canal+MQ,会有乱序的问题吗?
本文详细探讨了在阿里面试中常见的问题——“canal+MQ,会有乱序的问题吗?”以及如何保证RocketMQ消息有序。文章首先介绍了消息有序的基本概念,包括全局有序和局部有序,并分析了RocketMQ中实现消息有序的方法。接着,针对canal+MQ的场景,讨论了如何通过配置`canal.mq.partitionsNum`和`canal.mq.partitionHash`来保证数据同步的有序性。最后,提供了多个与MQ相关的面试题及解决方案,帮助读者更好地准备面试,提升技术水平。
阿里面试:canal+MQ,会有乱序的问题吗?
|
2月前
|
消息中间件 架构师 Java
阿里面试:秒杀的分布式事务, 是如何设计的?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试阿里、滴滴、极兔等一线互联网企业时,遇到了许多关于分布式事务的重要面试题。为了帮助大家更好地应对这些面试题,尼恩进行了系统化的梳理,详细介绍了Seata和RocketMQ事务消息的结合,以及如何实现强弱结合型事务。文章还提供了分布式事务的标准面试答案,并推荐了《尼恩Java面试宝典PDF》等资源,帮助大家在面试中脱颖而出。
|
2月前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
2月前
|
Kubernetes 架构师 算法
阿里面试:全国14亿人,统计出重名最多的前100个姓名
文章介绍了如何解决“从全国14亿人的数据中统计出重名人数最多的前100位姓名”的面试题,详细分析了多种数据结构的优缺点,最终推荐使用前缀树(Trie)+小顶堆的组合。文章还提供了具体的Java代码实现,并讨论了在内存受限情况下的解决方案,强调了TOP N问题的典型解题思路。最后,鼓励读者通过系统化学习《尼恩Java面试宝典》提升面试技巧。
阿里面试:全国14亿人,统计出重名最多的前100个姓名
|
2月前
|
存储 缓存 NoSQL
阿里面试题:缓存的一些常见的坑,你遇到过哪些,怎么解决的?
阿里面试题:缓存的一些常见的坑,你遇到过哪些,怎么解决的?

热门文章

最新文章