作为一名刚刚学习过步入职场的小白,脱离了项目导师的指导,在工作中经常会出现不知道该如何学习、如何成长?在这里千锋教育大数据就业指导老师为学员总结了大数据hadoop yarn分享一下。 很多人提到Hadoop首先想到的是Map/Reduce,其实从2.0开始Hadoop已经从单纯的分布式M/R计算框架变成了通用分布式框架。 上图是Hadoop2.0的技术栈,在Hadoop2.0中Hadoop底层划分为YARN和HDFS两个部分。YARN提供了集群资源管理,HDFS提供了分布式存储。在此之上开发出来的应用被称为Application,MapReduce就是其中的一个Application。需要注意的是: YARN和HDFS没有任何关系,甚至连代码都是可以彼此独立编译的; YARN和MapReduce也是彻底解耦的,绝对不存在"YARN为了M/R做了特殊优化"的说法; 基于YARN我们可以开发自己的Application,比如Spark就属于YARN上的一个Application。当然这个Application可以和HDFS没有关系也可以和M/R没有关系; 所以Hadoop2.0本质上是一个技术框架(Framework),最重要的核心组件是YARN,基于YARN你可以轻松开发一个分布式系统。 YARN YARN(YetAnotherResourceNegotiator)是一个分布式资源管理框架,可以把它理解为一种基础设施——提供了资源分配、调度、执行环境的基础设施(听起来像不像分布式操作系统)。 ResourceManager,整个集群中只能有一个它掌握了整个集群的资源分布情况,响应资源申请,为Application分配资源。下图是ResourceManager的三大功能 NodeManager,整个集群中可以有多个NodeManager,它启动之后会向ReosurceManager报告自己的资源情况。当ResourceManager把程序丢过来的时候它会为程序提供一个运行环境(Container)。 NodeManager并没有限制Container的实现是什么,它内置了两种实现——DefaultContainerExecutor是基于JVM的Container,NodeManager会为每个程序开辟吃一个新的进程;LinuxContainerExecutor基于CGroup实现的Container,NodeManager会利用Linux的CGroup为了每个应用提供运行环境。YARN出现的要比Docker早,所以它是直接使用的CGroup而没有采用Docker。幸运的是从Hadoop2.6开始已经提供DockerContainerExecutor。举个生活中的例子,你现在是一名拥有百套固定资产的房东,本来期望的的生活是撩妹->收房租->撩妹,结果发现自己每天忙着帮房客找适合它的房子、安排房客入驻或者安排房客搬出之类的破事。撩妹什么的大事情根本没有精力去做,所以现在是时候做出改变了!!我们可以把你的百套固定资产看成资源池,你是资源拥有者(ReosurceManager),房客(Application)是申请资源的人,为了便于管理每个小区安排一个代理人(NodeManager)。你有一个小本本上面记录了每个小区入住了哪些人,有多少空房,这些信息都是代理人每天向你报告的。当房客找你租房的时候你只要看一眼小本本,然后把代理人(NodeManager)的联系方式给房客就行了。 YARNApplication工作原理 YARN采用的是二级资源分配,它的工作过程要比上面的描述复杂的多。为了更加详细的解释YARNApplication的工作原理我们来看一张官方的图 这幅图里面有两个Application,一个颜色是粉红色的一个是紫色,两个并没有什么区别,粉红色的占用资源比较多,紫色的比较少,我们关注紫色的。先看蓝色的线,NodeManager启动之后会向ResourceManager报告自己的资源分配情况再看黑色的虚线 Client(其实就是Application)会先向ResourceManager申请提交应用(SubmitApplication),ResourceManager会返回集群中所有可用资源;Client申请一个Container用来运行ApplicationMaseter的部分,ResourceManager选择一份资源把任务下发到NodeManager(Client到ResourceManager的虚线) NodeManager会启动一个Container来执行ApplicationMaster(图中对应紫色AppMstr)。 至此,一级资源分配完毕,接下来的工作是ApplicationMaster和ResourceManager交互完成剩余资源申请工作。 ApplicationMaster向ResourceManager申请资源用于执行实际计算任务。ResourceManager会根据情况返回可用的资源(所有的申请未必全部满足),ApplicationMaster也会根据实际情况决定是否使用申请到的资源。(图中紫色AppMstr到ResourceManager的黑色虚线) ApplicaitonMaster申请到的资源依然交给NodeManager处理,它会启动Container用来执行计算任务。(图中紫色AppMastr到紫色Container的黑线) 总结下来其实就一句话——两级资源调度会先分配你一份计算资源,这份计算资源用来跑的程序会尝试申请更多份计算资源。两级资源调度可以提高系统资源利用率。系统的资源是动态变化的,每隔一段时间就要分配新的计算或者释放计算资源,一个Application的资源需求不可能被一次性满足,两级调度会先尝试分配一部分资源给Application以保证Application可以正常运行。接下来有新的资源会为Applicaiton追加新的资源。 分布式资源管理框架 看到网上有一些对比YARN和mesos的文章会说YARN是专门为M/R量身定制的或者说不支持两级调度。其实这些说法都不正确,YARN是一个纯粹的分布式资源管理框架它和M/R并没有任何直接关系。我们可以基于YARN开发自己的Application,比如Spark就是很好的例子。后面的文章我会尝试和大家一起开发一个真正的YARNApplication,我们会发现HadoopYARN带给我们的惊喜。 谨记以上的资料哦,大数据自然会越来越顺畅。千锋教育大数据就业导师也衷心祝愿初入职场的大数据开发者们可以早日脱离小白的现状,进阶成为IT大牛。
|