是时候该讨论一下YARN了。
最近看了不少YARN的技术资料,每次看都觉得不知所云。无法理解其精髓,今天在航班上突然灵光一现,豁然开朗。然后,又洋洋洒洒在航班清洁袋上鬼画符,写下了今天我想跟大家分享的内容。我自己觉得蛮过瘾的,也希望大家看着也更过瘾。
废话不多说,上图!
首先,我郑重申明:我家庭和睦,我很爱我的孩子,更爱我的老婆(请注意我说话的顺序,我很严谨)。
解释一下以上这张图想要表达的意思。上图讲述的就是一个家庭生活中经常会遇到的场景:给小孩买东西。
儿子:小名Client,提需求是他的强项,自己没有购买能力,只能将需求提交给他老妈——也就是我老婆。
老婆:小名RM,超级大Boss,家庭核心成员,掌门人,擅长垂帘听政。平日主要负责两件大事:1、资金管理,家里的生活开支、事无巨细、样样门儿清(老婆辛苦了)。2、排计划,手上的资金不能乱花,所以都按计划行事,杜绝突发情况出现。
老公:小名AM,也就是鄙人了。1、擅长执行任务(劳累命,哈哈),需要随时接受老婆分配的工作任务。2、需要周期性的通过亲情电话号码向老婆汇报生活和工作等各方面的情况(多跟上级汇报工作是职场法则)。其他方面就不多说了,都是泪,过……。自己看图理解!
买东西其实不复杂,具体的处理流程如下:
儿子只负责提需求。老婆主要根据当前家庭的收入支出情况,以及需求的合理性(玩具是否适合这个年龄段、是否具有危险性、是否适合男孩子玩等)来判断需求是否可以被接纳。一旦确定儿子提出的请求是合理的,就把购买商品的任务下发给老公执行。
还有一种情况,如果儿子一次性有多个商品需要购买的话,老婆为了防止老公搞混淆了,也会一个个的下达单独的购买指令、由老公来负责逐一执行。老婆在提交购买指令的时候,会详细说明购买商品的要求。
老公接到老婆下发的指令后,立马执行任务。并且需要具备基本的判断能力,比如:哪些商品适合在淘宝购买,哪些商品是适合在京东上购买等等。这个过程需要多加小心,处理的好就是一座丰碑,处理不当的话就会成为一个墓碑了,极有可能莫名其妙的得罪了老婆。
老公需要周期性的主动关注老婆的淘宝或京东购物车状态,并且要对购物车中收藏的商品进行细致的分析,理清楚商品购买的优先级。确定购买优先级的方法有以下几种:
其一:老婆自用的商品优先级高。如果老婆自用的商品太多,那就需要从时间维度考量,收藏时间很久的,优先级一定要提高,不然死都不知道怎么死的;
其二:价格低的商品优先级高,花钱少,就别磨叽了;
其三:把商品进行分类,比如:衣、食、住、行。然后根据各类产品所占比例来排优先级。这种情况下,一般购买量大,为了不影响本月的资金周转,也建议购买占比最小的商品类别。这样花钱,心里多少会好受一些。
在购买商品的时候,也必须及时跟老婆商讨,以免选定的商品不符合要求。
老公选择好商品后,正式下单。下单的快递号需要及时发给老婆。老婆会经常提醒老公催厂家发货。老公需要通过淘宝或者京东的App实时监控商品的物流状态。值得说明的是:老公和老婆直接的沟通是有单独的绿色通道的,在运营商设置了亲情号码,保证沟通快捷高效。
商品到货后,交给儿子使用。
至此,整个流程结束。
为什么文章标题要把YARN与母系社会扯在一起呢?
道理很简单:女人,是适合处理各种对内、对外的事务的,沟通协调是她们的长项。简单中不乏睿智,强势中也不缺温柔。
说点正经的吧。
YARN,是Yet Another Resource Negotiator的缩写,是一个通用的资源管理平台,可为各类计算框架(离线计算MR、在线计算Storm、内存计算Spark等)提供资源的管理和调度。它将集群内所有节点的资源(CPU、内存、磁盘、网络等)抽象为Container,在资源进行运算任务时,计算框架需要向YARN申请Container,YARN按照策略对资源进行调度,进行Container的分配。
几个基本组件介绍:
1、ResourceManager(RM)
RM是YARN的核心组件,属于YARN家族中的大当家,主要由应用程序管理器(Applications Manager)和任务调度器(Scheduler)组成。其主要功能是负责系统资源的管理和分配。
应用程序管理器(Applications Manager)
应用程序管理器,负责管理整个系统中所有应用程序,包括应用程序提交、向任务调度器申请资源启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它。
任务调度器(Scheduler)
任务调度器根据系统资源容量以及管理员对队列的限制条件,按照一定的策略将资源分配给正在运行的应用程序。相比于Hadoop1.x而言,Yarn为任务调度器做了减负,任务调度器不再负责跟踪和监控应用的执行状态,也不负责重新启动因为应用执行失败或者硬件故障而运行失败的任务,这些任务都有该应用程序对应的ApplicationMaster来负责了,这使得YarnScheduler的功能更加纯粹。另外,任务调度器和Hadoop1.x一样也是一个热插拔模块,你可以自定义自己的任务调度器,同样你也可以直接使用其他任务调度器,如,Fair Scheduler或者Capacity Scheduler。
2、ApplicationMaster(AM)
每当用户提交了一个应用程序就会为这个应用程序产生一个对应的AM,并且这个单独进程是在其中一个子节点上运行的。它的主要功能:为应用向RM申请资源,并对Task实行调度、与NodeManager通信以启动或者停止任务、监控所有任务的运行情况,并且在任务失败的情下,重新为任务申请资源并且重启任务、负责推测任务的执行、当AM向RM注册后,AM可以提供客户端查询作业进度信息等。
3、NodeManager(NM)
NM是每个子节点上的资源和任务管理器,一方面,它会定向通过心跳信息向RM汇报本节点上的资源使用情况和各个Container的运行情况;另一方面,它会接收并且处理来自AM的Container启动和停止的各种请求。
4、Container
Container是YARN中对系统资源的抽象,同时它也是系统资源分配的基本单位,它封装节点上多维度资源,其中包括CPU、内存、磁盘、网络等。YARN会为每个任务分配一个Container,并且该任务只能够使用该Container中所描述的资源。Container是一个动态的资源划分单位,它是根据实际提交的应用程序所需求的资源自动生成的,换句话说,Container其里边所描述的CPU、内存等资源是根据实际应用程序需求而变的。
YARN的工作流程如下:
步骤1,用户(儿子)向YARN提交应用程序,其中包括用户程序、相关文件、启动AM命令、AM程序等。
步骤2,RM(老婆)为该应用程序分配第一个Container(任务),并且与Container所在的NM(老公)通信,并且要求该NM在这个Container中启动应用程序对应的AM。
步骤3,AM(具体购买的某个商品)首先会向RM注册,这样用户才可以直接通过RM查看到应用程序的运行状态,然后它为准备为该应用程序的各个任务申请资源,并监控它们的运行状态直到运行结束,即重复后面4-7步骤。
步骤4,AM采用轮询的方式通过RPC协议(亲情号码)向RM申请和领取资源。
步骤5,一旦AM申请到资源后,便会与申请到的Container所对应的NM进行通信,并且要求它在该Container中启动任务。
步骤6,任务启动。NM为要启动的任务配置好运行环境,包括环境变量、JAR包、二进制程序等,并且将启动命令写在一个脚本里,通过该脚本运行任务。
步骤7,各个任务通过RPC协议向其对应的AM汇报自己的运行状态和进度,以让AM随时掌握各个任务的运行状态,从而可以在任务运行失败时重启任务(监控商品快递的状态等)。
步骤8,应用程序运行完毕后,其对应的AM会向RM通信,要求注销和关闭自己。
最后,还原一下最开始的架构图,供各位理解:
不得不说:生活,就是一门高深莫测的艺术!你们承不承认?
原文发布时间为:2018-11-22
本文作者:两年砍柴