Hadoop Yarn 是什么
在古老的 Hadoop1.0 中,MapReduce 的 JobTracker 负责了太多的工作,包括资源调度,管理众多的 TaskTracker 等工作。这自然是不合理的,于是 Hadoop 在 1.0 到 2.0 的升级过程中,便将 JobTracker 的资源调度工作独立了出来,而这一改动,直接让 Hadoop 成为大数据中最稳固的那一块基石。,而这个独立出来的资源管理框架,就是 Yarn 。
在详细介绍 Yarn 之前,我们先简单聊聊 Yarn ,Yarn 的全称是 Yet Another Resource Negotiator ,意思是“另一种资源调度器”,这种命名和“有间客栈”这种可谓是异曲同工之妙。这里多说一句,以前 Java 有一个项目编译工具,叫做 Ant,他的命名也是类似的,叫做 “Another Neat Tool”的缩写,翻译过来是“另一种整理工具”。
既然都叫做资源调度器了,那么自然,它的功能也是负责资源管理和调度的,接下来,我们就深入到 Yarn 这个东西内部一探究竟吧。
Yarn 架构
① Client:客户端,负责向集群提交作业。
② ResourceManager:集群主进程,仲裁中心,负责集群资源管理和任务调度。
③ Scheduler:资源仲裁模块。
④ ApplicationManager:选定,启动和监管ApplicationMaster。
⑤ NodeManager:集群从进程,管理监视Containers,执行具体任务。
⑥ Container:本机资源集合体,如某Container为4个CPU,8GB内存。
⑦ ApplicationMaster:任务执行和监管中心。
三个主要组件
再看最上面的图,我们能直观发现的两个主要的组件是 ResourceManager
和 NodeManager
,但其实还有一个 ApplicationMaster
在图中没有直观显示。我们分别来看这三个组件。
ResourceManager
我们先来说说上图中最中央的那个 ResourceManager(RM)。从名字上我们就能知道这个组件是负责资源管理的,整个系统有且只有一个 RM ,来负责资源的调度。
它也包含了两个主要的组件:定时调用器(Scheduler)
以及应用管理器(ApplicationManager)
。
定时调度器(Scheduler)
:从本质上来说,定时调度器就是一种策略,或者说一种算法。当 Client 提交一个任务的时候,它会根据所需要的资源以及当前集群的资源状况进行分配。注意,它只负责向应用程序分配资源,并不做监控以及应用程序的状态跟踪。
应用管理器(ApplicationManager)
:同样,听名字就能大概知道它是干嘛的。应用管理器就是负责管理 Client 用户提交的应用。上面不是说到定时调度器(Scheduler)不对用户提交的程序监控嘛,其实啊,监控应用的工作正是由应用管理器(ApplicationManager)完成的。
ApplicationMaster
每当 Client 提交一个 Application 时候,就会新建一个 ApplicationMaster 。由这个 ApplicationMaster 去与 ResourceManager 申请容器资源,获得资源后会将要运行的程序发送到容器上启动,然后进行分布式计算。
这里可能有些难以理解,为什么是把运行程序发送到容器上去运行?如果以传统的思路来看,是程序运行着不动,然后数据进进出出不停流转。但当数据量大的时候就没法这么玩了,因为海量数据移动成本太大,时间太长。但是中国有一句老话山不过来,我就过去。大数据分布式计算就是这种思想,既然大数据难以移动,那我就把容易移动的应用程序发布到各个节点进行计算呗,这就是大数据分布式计算的思路。
NodeManager
NodeManager 是 ResourceManager 在每台机器的上代理,负责容器的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),以及向 ResourceManager/Scheduler 提供这些资源使用报告。
Yarn的主要思想是将MRv1版JobTracker的两大功能——资源管理和任务调度,拆分成两个独立的进程:
Yarn依旧是master/slave结构
主进程ResourceManager是整个集群资源仲裁中心
从进程NodeManager管理本机资源
ResourceManager和从属节点的进程NodeManager组成了Hadoop 2.0的分布式数据计算框架
提交一个 Application 到 Yarn 的流程
这张图简单地标明了提交一个程序所经历的流程,接下来我们来具体说说每一步的过程。
Client 向 Yarn 提交 Application,这里我们假设是一个 MapReduce 作业。
ResourceManager 向 NodeManager 通信,为该 Application 分配第一个容器。并在这个容器中运行这个应用程序对应的 ApplicationMaster。
ApplicationMaster 启动以后,对 作业(也就是 Application) 进行拆分,拆分 task 出来,这些 task 可以运行在一个或多个容器中。然后向
ResourceManager 申请要运行程序的容器,并定时向 ResourceManager 发送心跳。申请到容器后,ApplicationMaster 会去和容器对应的 NodeManager 通信,而后将作业分发到对应的 NodeManager 中的容器去运行,这里会将拆分后的 MapReduce 进行分发,对应容器中运行的可能是 Map 任务,也可能是 Reduce 任务。
容器中运行的任务会向 ApplicationMaster 发送心跳,汇报自身情况。当程序运行完成后, ApplicationMaster 再向 ResourceManager 注销并释放容器资源。
以上就是一个作业的大体运行流程。
Yarn 架构典型拓扑
除了ResourceManager
和NodeManager
两个实体外,Yarn还包括WebAppProxyServer
和JobHistoryServer
两个实体。
JobHistoryServer
:管理已完成的Yarn任务
- 历史任务的日志和执行时的各种统计信息统一由JobTracker管理
- Yarn将管理历史任务的功能抽象成一独立实体JobHistoryServer
WebAppProxyServer
:任务执行时的Web页面代理
- 通过使用代理,不仅进一步降低了ResourceManager的压力,还能降低Yarn受到的Web攻击
- 负责监管具体MapReduce任务执行全过程,将从Container那里收集过的任务执行信息汇总并显示到一个Web界面上
Yarn 调度策略
容量调度算法CapacityScheduler
是一种多用户多任务调度策略,它以队列为单位划分任务,以Container
为单位分配资源
公平调度策略FairScheduler
是一种允许多个Yarn
任务公平使用集群资源的可插拔式调度策略
評論