小闫辛苦码了 2920个字 文章可能占用您 8分钟
欢迎关注「全栈技术精选」
The only way of finding the limits of the possible is by going beyond them into the impossible.
——Arthur C. Clarke
Hadoop之YARN,你了解吗?更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
前情回顾
Hadoop学习笔记(一)
Hadoop学习笔记(二)之HDFS
Hadoop学习笔记(三)之MapReduce
1.YARN
1.1 背景
YARN的出现是为了解决在Hadoop1.x版本中存在的一些问题。
之前,MapReduce是Master/Slave结构,也就是集群中一个Job Tracker多个Task Tracker。Job Tracker负责资源管理和作业调度,Task Tracker负责定期向Job Tracker报告节点的状态(节点死活,资源使用情况、任务执行情况)以及接收Job Tracker的命令来执行。不知你是否发现,问题就出现在这一个Job Tracker上,它挂掉,整个集群都完蛋。而且它由于负责了所有节点的RPC请求,压力可想而知,也因此成为了节点规模扩大的瓶颈。最后一点便是集群仅支持MapReduce,不支持其他计算框架。如果想使用Spark呢?对不起,再搭建一个集群,想使用HBase只能再搭建一个集群。这样的一堆集群既不好管理,又使得资源利用率极低(一段时间内这个集群忙,那个集群闲),同时跨集群的数据转移更是问题。于是乎,YARN诞生了。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
1.2 简介
1)YARN全称是Yet Another Resource Negotiator「另一种资源协调者」。
2) 它是一个通用的资源管理系统。
3) 它的引入提高了集群的利用率,便于资源统一管理调度,在数据共享方面也带来了极大好处。
4) 它是Job Tracker的替代者。
1.3 架构

1)YARN由四部分组成:Client、ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)。
2) 采用了Master/Slave结构。一个ResourceManager对应多个NodeManager。Client向ResourceManager提交任务或终止任务。ApplicationMaster(AM) 由对应的应用程序完成,每个应用程序对应一个ApplicationMaster(AM) ,ApplicationMaster(AM) 向ResourceManager申请资源用于在NodeManager上启动相应的任务。NodeManager(NM) 通过心跳信息向ResourceManager汇报自身状态信息。MapTask对应的是MapReduce作业启动时产生的任务,MPITask是MPI框架对应的执行任务。
MPI是消息传递接口,可以理解为更原生的一种分布式模型
1.4 核心组件功能
1)ResourceManager:整个集群只有一个。负责集群资源的统一管理和调度;启动或监控ApplicationMaster(一旦某个AM出现故障,RM将会在另一个节点上启动该AM);监控NodeManager,接收其心跳信息并为其分配任务(一旦某个NM出故障,标记一下该NM上的任务,来告诉对应的AM如何处理)。
2)NodeManager:整个集群中有多个,负责单节点资源管理和使用。定时向ResourceManager汇报节点状态信息;接收并处理来自ResourceManager的Container启动或停止的各种命令;处理来自ApplicationMaster的命令。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
3)ApplicationMaster:每个应用一个,负责应用程序的管理。数据切分;为应用程序或作业向ResourceManager申请资源(Container),并分配给内部任务;与NodeManager通信以启动或者停止任务;任务监控和容错(在任务执行失败时重新为该任务申请资源以重启任务);处理ResourceManager发过来的命令:终止Container、让NodeManager重启等。
4)Container:对任务运行环境的抽象。任务运行资源(节点、内存、CPU);任务启动命令;任务运行环境;任务是运行在Container中,一个Container中既可以运行ApplicationMaster,也可以运行具体的Map、Reduce、MPI、Spark Task。
1.5 工作原理

1) 用户向YARN中提交应用程序/作业,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
2)Resource Manager为作业分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动该作业的ApplicationMaster。
3)Application Master首先向Resource Manager注册,这样用户可以直接通过Resource Manager查询作业的运行状态;然后将为各个任务申请资源并监控任务的运行状态,直到运行结束。即重复步骤(7)。
4)Application Master采用轮询的方式通过RPC请求向ResourceManager申请和获取资源。
5) 一旦ApplicationMaster申请到资源,便与对应的NodeManager通信,要求它启动任务。
6)NodeManager启动任务。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
7) 各个任务通过RPC协议向ApplicationMaster汇报自己的状态和进度,以便ApplicaitonMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;在作业运行过程中,用户可随时通过RPC向ApplicationMaster查询作业当前运行状态。
8) 作业完成后,ApplicationMaster向ResourceManager注销并关闭自己。
1.6 特点
1)ResourceManager基于ZooKeeper实现高可用机制,避免发生单点故障。
2)Node Manager执行失败后,ResourceManager将失败任务告诉对应的ApplicationMaster,由ApplicationMaster决定如何处理失败的任务。
3)Application Master执行失败后,由ResourceManager负责重启ApplicationMaster需处理内部任务的容错问题,并保存已经运行完成的Task,重启后无需重新运行。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
学习自《基于Hadoop与Spark的大数据开发实战》一书










排版:小闫
图片素材:小闫
文案:小闫
长按扫描下方二维码即刻关注小闫



原文始发于微信公众号(全栈技术精选):Hadoop学习笔记(四)之YARN
