Hadoop YARN学习技术分享

编辑:光环大数据 来源: 互联网 时间: 2017-11-09 11:31 阅读:

  hadoop 2.0的本质

  很多人提到Hadoop首先想到的是Map/Reduce,其实从2.0开始Hadoop已经从单纯的分布式M/R计算框架变成了 通用分布式框架 。

  上图是Hadoop2.0的技术栈,在Hadoop 2.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(Yet Another Resource Negotiator)是一个分布式资源管理框架,可以把它理解为一种基础设施——提供了资源分配、调度、执行环境的基础设施(听起来像不像分布式操作系统)。

  ResourceManager,整个集群中只能有一个它掌握了整个集群的资源分布情况,响应资源申请,为Application分配资源。下图是ResourceManager的三大功能

  NodeManager,整个集群中可以有多个NodeManager,它启动之后会向ReosurceManager报告自己的资源情况。当ResourceManager把程序丢过来的时候它会为程序提供一个运行环境(Container)。

  NodeManager并没有限制 Container的实现 是什么,它内置了两种实现——DefaultContainerExecutor是基于JVM的Container,NodeManager会为每个程序开辟吃一个新的进程;LinuxContainerExecutor基于CGroup实现的Container,NodeManager会利用Linux的CGroup为了每个应用提供运行环境。YARN出现的要比Docker早,所以它是直接使用的CGroup而没有采用Docker。幸运的是从Hadoop 2.6开始已经提供DockerContainerExecutor。 举个生活中的例子,你现在是一名拥有百套固定资产的房东,本来期望的的生活是撩妹->收房租->撩妹,结果发现自己每天忙着帮房客找适合它的房子、安排房客入驻或者安排房客搬出之类的破事。撩妹什么的大事情根本没有精力去做,所以现在是时候做出改变了!! 我们可以把你的 百套固定资产 看成资源池,你是 资源拥有者(ReosurceManager) , 房客(Application) 是申请资源的人,为了便于管理每个小区安排一个 代理人(NodeManager) 。你有一个小本本上面记录了每个小区入住了哪些人,有多少空房,这些信息都是 代理人 每天向你报告的。当 房客 找你租房的时候你只要看一眼小本本,然后把 代理人(NodeManager) 的联系方式给 房客就行了。

  YARN Application工作原理

  YARN采用的是二级资源分配,它的工作过程要比上面的描述复杂的多。为了更加详细的解释YARN Application的工作原理我们来看一张官方的图

  这幅图里面有两个Application,一个颜色是粉红色的一个是紫色,两个并没有什么区别,粉红色的占用资源比较多,紫色的比较少,我们关注紫色的。 先看蓝色的线,NodeManager启动之后会向ResourceManager报告自己的资源分配情况 再看黑色的虚线

  Client(其实就是Application)会先向ResourceManager申请 提交应用(SubmitApplication) ,ResourceManager会返回集群中所有可用资源;Client申请一个Container用来运行ApplicationMaseter的部分,ResourceManager选择一份资源把任务下发到NodeManager(Client到ResourceManager的虚线)

  NodeManager会启动一个Container来执行ApplicationMaster(图中对应紫色App Mstr)。

  至此,一级资源分配完毕,接下来的工作是ApplicationMaster和ResourceManager交互完成剩余资源申请工作。

  ApplicationMaster向ResourceManager申请资源用于执行实际计算任务。ResourceManager会根据情况返回可用的资源(所有的申请未必全部满足),ApplicationMaster也会根据实际情况决定是否使用申请到的资源。(图中紫色App Mstr到ResourceManager的黑色虚线)

  ApplicaitonMaster申请到的资源依然交给NodeManager处理,它会启动Container用来执行计算任务。(图中紫色App Mastr到紫色Container的黑线)

  总结下来其实就一句话——两级资源调度会先分配你 一份计算资源 ,这份计算资源用来跑的程序会尝试申请更多份计算资源。两级资源调度可以提高系统资源利用率。系统的资源是动态变化的,每隔一段时间就要分配新的计算或者释放计算资源,一个Application的资源需求不可能被一次性满足,两级调度会先尝试分配一部分资源给Application以保证Application可以正常运行。接下来有新的资源会为Applicaiton追加新的资源。

  分布式资源管理框架

  看到网上有一些对比YARN和mesos的文章会说 YARN是专门为M/R量身定制的或者说不支持两级调度 。其实这些说法都不正确,YARN是一个纯粹的分布式资源管理框架它和M/R并没有任何直接关系。我们可以基于YARN开发自己的Application,比如Spark就是很好的例子。后面的文章我会尝试和大家一起开发一个真正的YARN Application,我们会发现Hadoop YARN带给我们的惊喜。

 

  大数据时代Hadoop培训大数据培训培训班,就选光环大数据!


大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 更多问题咨询,欢迎点击------>>>>在线客服

你可能也喜欢这些

在线客服咨询

领取资料

X
立即免费领取

请准确填写您的信息

点击领取
#第三方统计代码(模版变量) '); })();
'); })();