继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Yarn框架深入理解

慕码人8056858
关注TA
已关注
手记 1247
粉丝 350
获赞 1323

我们都知道Hadoop诞生的目标是为了支持十几台机器的搜索服务,但是随着数据的增加,数据的可用性也是一个待解决的问题。但是Hadoop框架的自身问题限制了集群的发展。

首先是,JobTracker和NameNode的单点问题,严重制约了集群的扩展和可靠性。


webp

360截图17901125366259.png

其次我们通过:

知道。MapReduce采用了基于slot的资源分配模型,slot是一种粗粒度的资源 划分单位,通常一个任务不会用完槽位对应的资源,且其他任务也无法使用这些空闲资源,同时map的槽位和reduce的槽位是不可以通用的。会导致部分资源紧张,部分资源空闲。

webp

360截图17571120483156.png

同时为了满足在线计算等新的计算框架,MapReduce这种离线计算框架已经不能满足需求。

Yarn框架

JobTracker在 YARN 中JobTracker大约分成了 3 块:

  • 一部分是 ResourceManager,负责 Scheduler 及
    ApplicationsManager;

  • 一部分是 ApplicationMaster,负责 job 的生命周期管理;

  • 最后一部分是 JobHistroyServer,负责日志的展
    示。
    为了支持更多的计算模型,把以前的 TaskTracker 替换成了 NodeManager。NodeManager 管理各种各样的 container。Container
    才是真正干活的。计算模型相关的事情可以放在 NodeManager 的一个扩展服务中,如 MAP-REDUCE 的 shuffle。

webp

360截图17970216102332.png

各大模块分析

ResourceManager

RM 是一个全局的资源管理器,负责整个系统的资源管理和分配,包括 scheduler 和 Application Manager, NM Manager

对调度器来说,YARN 提供了多种直接可用的调度器, Fair Scheduler 和 Capacity Scheduler 等。调度器仅根据各个应用程序的资源需 求进行资源分配,分配的基本单位是Container,而容器里面是将内存,CPU,网络,磁盘封装到一起。

同时用户也可设计自己的调度器。

ApplicationMaster

对应用程序管理器来说,,包括应用程序提交、与调度器协商 资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重新启动它等。用户提交的每个应用程序均包含一个 ApplicationMaster,ApplicationMaster可以与RM协商获取资源,也可以将得到的任务进行再分配,与NM通信,同时可以监控所有的任务状态。

NodeManager

NodeManager 管理 container、资源下载、健康检测后汇报 对节点管理器来说,NM是每个节点上的资源和任务管理器,一方面,它会定时地向 RM 汇报本节点上的 资源使用情况和各个 Container 的运行状态;另一方面,它接收并处理来自 AM 的 Container 启动 / 停止等各种请求。

Container

Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、 CPU、磁盘、网络等,当 AM 向 RM 申请资源时,RM 为 AM 返回的资源便是用 Container 表示的。YARN 会为每个任务分配一个 Container,且该任务只能使用该 Container 中描述的 资源。容器是一个动态划分资源。

Jobhistory 机制

在 MRv1 中,JobHistroy server 是嵌入在 Jobtracker 中的,当有大量的查询 时,对 Jobtracker 造成很大的压力.Yarn中实现一套单独的 JobHistroy server 服务。AggregatedLogDeletionService:日志文件的 管理。  HistoryClientService:提供一些服务供 JobClient 查询。

Yarn工作流程

webp

360截图162501015810976.png

  • 1.用户向 YARN 中提交应用程序,其中包括 ApplicationMaster 程序、启动 ApplicationMaster 的命令、用户程序等。

  • 2.ResourceManager 为该应用程序分配第一个 Container,并与对应的 NodeManager 通信,要求它在这个 Container 中启动应用程序的 ApplicationMaster。

  • 3 ApplicationMaster 首先向 ResourceManager 注册,这样用户可以直接通过 ResourceManage 查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运 行状态,直到运行结束,即重复步骤 4~7。

  • 4 ApplicationMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和 领取资源。 步骤

  • 5. 一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求 它启动任务。

  • 6. NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序 等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

  • 7. 各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以 让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。 在应用程序运行过程中,用户可随时通过 RPC 向 ApplicationMaster 查询应用程序的当 前运行状态。

  • 8. 应用程序运行完成后, ApplicationMaster 向 ResourceManager 注销并关闭自己。



作者:张晓天a
链接:https://www.jianshu.com/p/bac54467ac3a


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP