您好,欢迎来到榕意旅游网。
搜索
您的当前位置:首页正文

我眼中的Yarn

来源:榕意旅游网

Yarn简介
为克服Hadoop1.0中HDFS和MapReduce存在的各种问题而提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架支持方面的不足,提出了全新的资源管理框架YARN。
Apache Yarn(Yet another Resource Negotiator)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于一个分布式的操作系统平台。而MapReduce等计算程序,则相当于运行于操作系统之上的应用程序。
Yarn被引入Hadoop2,最初是为了改善MapReduce的实现。但是,因为具有足够的通用性,同样可以支持其他的分布式计算模式,比如Spark,Tez等计算框架。
Yarn的设计思想
Yarn的基本思想是将资源管理和作业调度/监视功能划分为单独的守护进程,其思想是拥有一个全局ResourceManager(RM),以及每个应用程序拥有一个Applicationmaster。应用程序可以是单个作业,也可以是一组作业。
一个ResourceManager和多个NodeManager构成了Yarn资源管理框架。它是Yarn启动后长期运行的守护进程,来提供了核心服务。

  • ResourceManager,是在系统中所有应用程序之间仲裁资源的最终权威,即管理整个集群上的所有资源分配,内部含有一个Scheduler(资源调度器,默认为FIFO)。
  • NodeManger,是每台机器的资源管理器,也就是单个节点的管理者,负责启动和监视容器(container)资源使用情况,并向ResourceManager及其Scheduler报告使用情况。
    NodeManager可以通过心跳机制将节点状况实时汇报给ResourceManager,而ResourceManager则会根据每个NodeManager的状况调整分配的任务数目。
  • container,即集群上的可使用资源,包含CPU,内存,磁盘,网络等
  • ApplicationMaster,实际上是框架上特定的库,每启动一个应用程序,都会启动一个Application Master。它的任务是与ResourceManager协商资源,并与NodeManager一起执行和监视任务。
    Yarn框架流程
    任何框架与Yarn的结合,都必须遵循Yarn的开发模式。
    其中,ResourceManager负责将集群的资源分配给各个应用程序使用,而资源分配和调度的基本单位是container,其中封装了机器资源,如内存、CPU、磁盘和网络等。每个任务会被分配一个container,该任务只能在该Container中执行,并使用该Container封装的资源。NodeManager是一个计算节点,主要负责启动Application所需的Container,监控资源的使用情况并将之汇报给ResourceManager。ResourceManager和NodeManagers共同组成整个数据计算框架,ApplicationMaster与具体的Application相关,主要负责同ResourceManager协商以获取合适的Container,并跟踪这些container的状态和监控其进度。

Yarn的Job提交
1,yarn-client,Driver运行在本地客户端,负责调度application,会与yarn集群产生超大量的网络通信,从而导致网卡流量激增,可能会被公司运维警告。好处在于,直接运行时,本地可以看到所有的log,方便调试。
2,yarn-cluster,用于生产环境,Driver运行在NodeManager,没有网卡流量激增的问题。缺点在于调试不方便。本地用spark-submit提交后,看不到log,只能通过yarn application -logs application_id这种命令来查看,很麻烦。
流程:
1,Spark Yarn Client向Yarn中提交应用程序,ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,其中ApplicationMaster进行Driver等的初始化
2,Application Master向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将采用轮询的方式通过RPC协议为各个任务申请资源,并监控它们的运行状态直到运行结束;
3,ApplicationMaster启动后完成初始化作业,Driver生成DAG图,DAG scheduler将DAG拆分成stage发送给Task Scheduler
4,Application Master向ResourceManager申请资源,ResourceManager返回Executor信息
5,Application Master通过RPC启动相应的Executor,Executor向Driver申请task,TaskScheduler将Task发送给Executor
6,Executor执行task,执行结果写入外部或返回Driver端
Yarn的三种调度器

因篇幅问题不能全部显示,请点此查看更多更全内容

Top