yarn通用资源管理框架主要由以下几个部分组成:
ResourceManager(RM):由Scheduler调度器和ApplicationsManager(ASM:资源管理器)2个组件组成,ResourceManager和每个NodeManager
(NM)构成一个资源估算框架,管理协调分配集群中的资源,对在系统中所有应用的资源分配拥有最终最高级别的仲裁权。
ApplicationMaster(AM):用来协调应用程序下Task的运行。它和MapReduce Task都运行在 Container中,这个Container由RM(ResourcesManager)调度(启动/停止)并由NM(NodeManager)管理,并且监控所有Task的运行情况,在任务运行失败时,重新为任务申请资源以启动任务。
注:(MRAppMaster是mapreduce的ApplicationMaster实现)
Nodemanager(NM):用来启动和监控本地计算机资源单位Container的利用情况,是每个节点上的资源和任务管理器,定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态,并且接受并处理来自AM的Container启动/停止等请求。
Container:Container是yarn资源的抽象,它封装了某个节点上的多维度资源(内存,cpu,磁盘,网络等),当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。yarn会为每个任务分配一个Container,且该任务只能使用该Container描述的资源,它是一个动态资源划分单位,是根据应用程序的需求动态生成的。(目前yarn只支持cpu和内存2种资源)
来源:http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
1:用户向YARN中提交JOB,当在配置文件中设置mapreduce.framework.name为yarn时候,MapReduce2.0继承接口ClientProtocol的模式就激活了。RM会生成新的Job ID(即Application ID),接着Client计算输入分片,拷贝资源(包括Job JAR文件、配置文件,分片信息)到HDFS,最后用submitApplication函数提交JOB给RM。
获取新的JobID源码(org.apache.hadoop.mapred.YARNRunner):
@Override
public JobID getNewJobID() throws IOException, InterruptedException {
return resMgrDelegate.getNewJobID();
}
submitApplication提交应用程序源码(org.apache.hadoop.mapred.YARNRunner):
@Override
public JobStatus submitJob(JobID jobId, String jobSubmitDir, Credentials ts)
throws IOException, InterruptedException {
addHistoryToken(ts);
// Construct necessary information to start the MR AM
ApplicationSubmissionContext appContext =
createApplicationSubmissionContext(conf, jobSubmitDir, ts);
// Submit to ResourceManager
try {
ApplicationId applicationId =
resMgrDelegate.submitApplication(appContext);
ApplicationReport appMaster = resMgrDelegate
.getApplicationReport(applicationId);
String diagnostics =
(appMaster == null ?
"application report is null" : appMaster.getDiagnostics());
if (appMaster == null
|| appMaster.getYarnApplicationState() == YarnApplicationState.FAILED
|| appMaster.getYarnApplicationState() == YarnApplicationState.KILLED) {
throw new IOException("Failed to run job : " +
diagnostics);
}
return clientCache.getClient(jobId).getJobStatus(jobId);
} catch (YarnException e) {
throw new IOException(e);
}
}
通过Eclipse的Hadoop插件,可以查看应用程序的相关信息:
2:RM接受submitApplication方法提交的JOB,则将其请求交给Scheduler(调度器)处理,Scheduler(调度器)分配Container,同时RM在NM上分配应用程序第一个Container来启动ApplicationMaster进程,MRAppMatser会初始化一定数量的记录对象(bookkeeping)来跟踪JOB的运行进度,
并收取每个TASK的进度和完成情况,接着MRAppMaster收集计算后的输入分片情况,如果应用程序很小,能在同一个JVM上运行,则用uber模式,下面会讲满足什么情况才采用uber模式。
3:如果不在uber模式下运行,则Application Master会为所有的Map和Reducer task向RM请求Container,所有的请求都通过heartbeat(心跳)传递,心跳也传递其他信息,例如关于map数据本地化的信息,分片所在的主机和机架地址信息,这些信息帮助调度器来做出调度的决策,调度器尽可能遵循数据本地化或者机架本地化的原则分配Container。
在Yarn中,例如,用yarn.scheduler.capacity.minimum- allocation-mb设置最小申请资源1G,用yarn.scheduler.capacity.maximum-allocation-mb设置 最大可申请资源10G 这样一个Task申请的资源内存可以灵活的在1G~10G范围内
4:获取到Container后,NM上的Application Master就联系NM启动Container,Task最后被一个叫org.apache.hadoop.mapred.YarnChild的main类执行,不过在此之前各个资源文件已经从分布式缓存拷贝下来,这样才能开始运行map Task或者reduce Task。PS:YarnChild是一个(dedicated)的JVM。
5:当Yarn运行同时,各个Container会报告它的进度和状态给Application Master,客户端会每秒轮询检测Application Master,这样就随时收到更新信息,这些信息可以通过Web UI来查看。
6:客户端每5秒轮询检查Job是否完成,期间需要调用函数Job类下waitForCompletion()方法,Job结束后该方法返回。轮询时间间隔可以用配置文件的属性mapreduce.client.completion.pollinterval来设置
7:应用程序运行完成后, MRAppMaster向ResourceManager 注销并关闭自己。
YARN能够调度CPU和内存,有些任务使用CPU比较多,有些任务就比较占内存,所以要根据任务的特点合理的利用计算机资源。
分享到:
相关推荐
通过本书的学习,读者可以全面掌握Hadoop YARN的架构设计和实现原理,不仅理解各个组件的功能和工作方式,还能深入到源代码层面,从而在实际工作中更加高效地部署和优化YARN集群。此外,本书还通过对比分析了不同...
YARN 2.3.0 版本是Hadoop发展过程中的一个重要里程碑,它带来了多项改进和优化,包括性能提升、稳定性增强以及新功能的引入。例如,该版本可能包含对YARN的公平调度器和容量调度器的优化,使得资源分配更加公正且...
【描述】:YARN工作机制共4页,详细阐述了YARN如何管理和分配资源,以及其核心组件如ResourceManager、NodeManager、ApplicationMaster和Container的角色和交互过程。 【标签】:Hadoop技术,YARN工作机制 【正文...
YARN权威指南深入解析了YARN的架构,包括ResourceManager、NodeManager、ApplicationMaster和Container等关键组件的工作原理,以及如何优化资源调度和应用程序的性能。 在《Hadoop YARN权威指南》中,读者可以了解...
YARN的架构设计和工作流程,使其能支持各种计算框架,并提供了更好的资源管理和调度策略,满足了大数据时代对计算平台的需求。通过深入理解YARN,开发者可以更好地优化分布式应用,提升整个Hadoop集群的性能。
【标题】基于SpringBoot的Hadoop-Yarn资源监控系统源码 这个项目是关于构建一个使用SpringBoot技术的Hadoop-YARN资源监控系统。SpringBoot是Spring框架的一个轻量级衍生品,它简化了创建独立的、生产级别的基于...
Hadoop的资源管理系统YARN虽然提供了三种内置的资源调度器(FIFO Scheduler、Capacity Scheduler和Fair Scheduler),但在实际应用过程中,随着业务需求的增长和应用场景的多样化,这些内置调度器往往无法完全满足...
Hadoop 2.6 基于 YARN 的安装配置 Hadoop 2.6 是一个基于 YARN(Yet Another Resource Negotiator)的分布式计算框架,它提供了高效、可靠的数据处理能力。在本文中,我们将详细介绍 Hadoop 2.6 的安装配置过程,...
YARN的工作流程可以分为以下几个步骤: 1. 用户提交应用程序到YARN,包括ApplicationMaster程序、启动命令和用户程序。 2. ResourceManager分配第一个Container给NodeManager,并指示在该Container中启动...
YARN的工作流程包括以下几个关键步骤: 1. 应用提交:用户或应用程序客户端向RM提交应用,同时指定一个AM。 2. AM启动:RM为应用分配第一个Container,并在某个NM上启动AM。 3. 资源请求:AM向RM请求执行任务所需的...
YARN的工作流程如下: 1. 应用程序提交:用户或客户端提交应用程序到ResourceManager,同时指定ApplicationMaster的实现。 2. RM调度:ResourceManager为应用程序分配第一个Container,并启动ApplicationMaster。 3....
【Hadoop HA 集群部署与 YARN HA 测试Job 教学】 在大数据处理领域,Hadoop 是一个至关重要的分布式计算框架,它提供了高可用性(HA)的特性来确保服务的连续性和稳定性。Hadoop HA 主要指的是 HDFS(Hadoop ...
Hadoop 源码解析_Yarn 源码解析 Hadoop 是一个基于 Java 的大数据处理框架,Yarn 是 Hadoop 的资源...这些知识点是 Yarn 源码解析的核心内容,了解这些知识点可以帮助开发者更好地理解 Yarn 的工作机理和实现原理。
Apache Hadoop YARN是Hadoop 2.0核心组件之一,它代表了Hadoop技术的重大进步,超越了原有的MapReduce和批处理的局限性。Hadoop YARN权威指南是一本专门介绍YARN架构及其功能的书籍。首先,我们需要了解Hadoop YARN...
YARN(Yet Another Resource Negotiator),是Apache Hadoop生态系统中的核心组件之一,负责管理和调度集群资源,使得大数据处理更加高效和灵活。下面将详细阐述YARN的主要概念、工作原理及其在实际应用中的重要性。...
本文将围绕"Hadoop Yarn案例2"这一主题,深入探讨YARN在实际应用中的工作原理和优势,以及如何利用它来实现好友推荐系统。 好友推荐系统是社交网络服务中常见的一种功能,其背后通常涉及到大量的数据处理和分析。在...
《Hadoop技术内幕深入解析YARN架构设计与实现原理》这本书深入探讨了...《Hadoop技术内幕深入解析YARN架构设计与实现原理》这本书深入剖析了YARN的工作原理,对于理解Hadoop生态系统和优化大数据处理流程具有重要价值。
在大数据处理领域,Hadoop YARN(Yet Another Resource Negotiator)是Apache Hadoop项目的核心组件之一,主要负责集群资源的管理和调度。YARN优化对于提升整个Hadoop集群的性能至关重要,尤其是在处理大规模数据...