如何监控yarn上spark 提交任务到yarn是否运行

Hadoop之YARN及运行流程
Hadoop之YARN及运行流程
YARN是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
YARN通用资源管理框架组成部分:
1,ResourceManager(RM):由Scheduler(资源调度器)和ApplicationsManager(ASM:应用管理器)2个组件组成。RM和每个NodeManager
(NM)构成一个资源估算框架,管理协调分配集群中的资源,对集群中所有的资源拥有最终最高级别的仲裁权。
Scheduler:资源调度器主要负责将集群中的资源分配。Yarn默认实现了如下资源调度器:
ApplicationsManager:应用管理器主要负责接收应用程序,协商获取第一个Container用于执行AM,并且在AM
Container失败后,提供重启服务。
2,ApplicationMaster(AM):主要与RM协商获取应用程序所需资源。实际的资源都在NM中,所以AM和NM合作,在NM中运行任务,AM和MapReduce TASK都运行在Container中,Container由RM调度(启动/停止)并由NM(NodeManager)管理,监控所有Task的运行情况,在任务运行失败时,重新为任务申请资源以启动任务。
注:(MRAppMaster是mapreduce的ApplicationMaster实现)
3,Nodemanager(NM):用来启动和监控本地计算机资源单位Container的利用情况,是每个节点上的资源和任务管理器,定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态,并且接受并处理来自AM的Container启动/停止等请求。
4,Container:Container是yarn资源的抽象,它封装了某个节点上的多维度资源(内存,cpu,磁盘,网络等),当AM向RM申请资源时,RM为AM返回的资源便是用 Container表示的。yarn会为每个任务分配一个Container,且该任务只能使用该Container描述的资源,它是一个动态资源划分单位,是根据应用程序的需求动态生成的。(目前yarn只支持cpu和内存2种资源)
注:(YarnChild是Container实现)
JOB运行流程:
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):
public JobID getNewJobID() throws IOException, InterruptedException {
return resMgrDelegate.getNewJobID();
submitApplication提交应用程序源码(org.apache.hadoop.mapred.YARNRunner):
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
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:ASM(应用管理器)接受submitApplication方法提交的JOB,则将其请求交给Scheduler(调度器)处理,Scheduler(调度器)分配Container,同时RM在NM上分配应用程序第一个Container来启动AM进程,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结束后该方法返回。轮询时间间隔可以用配置文件的属性pletion.pollinterval来设置
7:应用程序运行完成后, MRAppMaster向ResourceManager注销并关闭自己。
YARN能够调度CPU和内存,有些任务使用CPU比较多,有些任务就比较占内存,所以要根据任务的特点合理的利用计算机资源。
我的热门文章
即使是一小步也想与你分享后使用快捷导航没有帐号?
查看: 1442|回复: 2
安装完毕hadoop2.2后yarn监控页面无法打开
论坛徽章:24
本帖最后由 dhjabc_1 于
14:50 编辑
安装完毕2.2后,可以在服务里面查看到相关的服务进程。[root@hadoop1 conf]# jps
23889 SecondaryNameNode
24033 ResourceManager
23718 NameNode
[root@hadoop3 ftp]# jps
6837 NodeManager
6732 DataNode
而且hdfs的监控页面也能正常打开,
2.jpg (169.85 KB)
14:49 上传
但是通过hadoop1:8088/cluster访问yarn的监控页面是就提示如下错误:
Error injecting constructor, .lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/usr/hadoop2/share/hadoop/common/lib/jaxb-impl-2.2.3-1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See file:///C:UsersADMINI~1AppDataLocalTemp%W@GJ$ACOF(TYDYECOKVDYB.png/j2se/1.6.0/docs/guide/standards/)
&&at org.apache.hadoop.yarn.server.resourcemanager.webapp.JAXBContextResolver.&init&(JAXBContextResolver.java:73)
&&at org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWebApp.setup(RMWebApp.java:44)
&&while locating org.apache.hadoop.yarn.server.resourcemanager.webapp.JAXBContextResolver
1.jpg (109.51 KB)
14:49 上传
想问问,大家在安装过程中遇到类似的问题了吗?
论坛徽章:24
求帮助,感谢!
扫一扫加入本版微信群Hadoop(20)
随着集群规模和负载的增加,JobTracker在内存消耗,线程模型,扩展性,可靠性方面暴露出了缺点,为此需要对它进行大整修。
MRv2最基本的设计思想是将JobTracker的两个主要功能,即资源管理和作业调度/监控分成两个独立的部分。在该解决方案中包含两个组件:全局的Resource Manager(RM)和与每个应用相关的Application Master(AM)。这里的“应用”指一个单独作业。RM和与NodeManager(NM,每个节点一个)共同组成整个数据计算框架。RM是系统中将资源分配给各个应用的最终决策者。AM实际上是一个具体的框架库,它的任务是“与RM协商获取应用所需资源”和“与NM合作以完成执行和监控task的任务”。
yarn有两种节点,Resource Manager和Node Manager。
RM由两个组件组成,资源调度器(Resource Scheduler)和应用管理器(Applications Manager,ASM)。
RM根据容量,队列等限制条件,将系统中的资源分配给各个正在运行的应用。这里的调度器是一个“纯调度器”,因为它不再负责监控或者跟踪应用的执行状态等,此外,他也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务。调度器仅根据各个应用的资源需求进行调度,这是通过抽象概念“资源容器”完成的,资源容器(Resource Container)将内存,CPU,磁盘,网络等资源封装在一起,从而限定每个任务使用的资源量。
调度器是可插拔的组件,YARN自带了多个资源调度器,如Capacity Scheduler和Fair Scheduler等。
ASM主要负责接收作业,协商获取第一个容器用于执行AM和提供重启失败AM container的服务。
NM是每个节点上的框架代理,主要负责启动应用所需的容器,监控资源(内存,CPU,磁盘,网络等)的使用情况并将之汇报给调度器。
AM主要负责同调度器协商以获取合适的容器,并跟踪这些容器的状态和监控其进度。
AM负责计算应用程序所需的资源量,比如MapReduce的input-splits,并把他们转化成调度器可以理解的协议。
调度器会尽量匹配该表中的资源;如果某个特定机器上的资源是不可用的,调度器会提供同一个机架或者不同机架上的等量资源代替之。有些情况下,由于整个集群非常忙碌,AM获取的资源可能不是最合适的,此时它可以拒绝这些资源并请求重新分配。
NodeManager
每个节点上装有一个NM,主要的职责有:
(1)为应用程序启动容器,同时确保申请的容器使用的资源不会超过节点上的总资源。
(2)为task构建容器环境,包括二进制可执行文件,jars等。
(3)为所在的节点提供了一个管理本地存储资源的简单服务,应用程序可以继续使用本地存储资源即使它没有从RM那申请。比如:MapReduce可以使用该服务程序存储map task的中间输出结果。
调度器收集所有正在运行的应用程序的资源请求并构建一个全局规划进行资源分配。调度器会根据应用程序相关的约束(如合适的机器)和全局约束(如队列资源总量,用户可提交作业总数等)分配资源。
调度器使用与容量调度类似的概念,采用容量保证作为基本的策略在多个应用程序间分配资源。
调度器的调度策略如下:
· 选择系统中“服务最低”的队列(如何定义服务最低?可以是资源利用量最低的队列,即:已使用的资源与总共可用资源比值最小)
· 从该队列中选择优先级最高的作业
· 尽量满足该作业的资源请求
ASM负责管理系统中所有应用程序的AM,ASM负责启动AM,监控AM的运行状态,在AM失败时对其进行重启等。
为了完成该功能,ASM主要有以下几个组件:
(1) SchedulerNegotiator:与调度器协商容器资源,并返回给AM
(2) AMContainerManager:告知NM,启动或者停止某个AM的容器
(3) AMMonitor:查看AM是否活着,并在必要的时候重启AM
ApplicationMaster
每个应用程序均会有一个AM,主要职责有:
(1) 与调度器协商资源
(2) 与NM合作,在合适的容器中运行对应的task,并监控这些task执行
(3) 如果container出现故障,AM会重新向调度器申请资源
(4) 计算应用程序所需的资源量,并转化成调度器可识别的格式(协议)
(5) AM出现故障后,ASM会重启它,而由AM自己从之前保存的应用程序执行状态中恢复应用程序。
Yarn调度器与AM之间仅有一个API:
Response allocate(List&ResourceRequest& ask, List&Container& release);
AM使用一个ResourceRequest列表请求特定资源,并同时可要求释放一些调度器已经分配的容器。
Response包含三方面内容:新分配的容器列表,自从上次AM与RM交互以来已经计算完成的容器的状态(包含该容器中运行task的详细信息),当前集群中剩余资源量。 AM收集完成容器的信息并对失败的任务作出反应。资源剩余量可用于AM调整接下来的资源请求,如MapReduce AM可使用该信息以合理调度maps和reduces从而防止产生死锁。
一个job的启动步骤
步骤1 获取ApplicationId。客户端向ResourceManager提交请求GetNewApplicationRequest,ResourceManager为其返回应答GetNewApplicationResponse,该数据结构中包含多种信息,包括ApplicationId、可资源使用上限和下限等。
步骤2 提交ApplicationMaster。客户端将启动ApplicationMaster所需的所有信息打包到数据结构ApplicationSubmissionContext中,然后调用submitApplication(ApplicationSubmissionContext)将ApplicationMaster提交到ResourceManager上。
步骤3 启动ApplicationMaster。ResourceManager收到请求后,会为ApplicationMaster寻找合适的节点,并在该节点上启动它。
ApplicationMaster
ApplicationMaster需要与ResoureManager和NodeManager交互,以申请资源和启动Container。
步骤1 注册。ApplicationMaster首先需向ResourceManager发送注册请求RegisterApplicationMasterRequest,而ResourceManager将返回RegisterApplicationMasterResponse。
步骤2 申请资源。根据每个任务的资源需求,ApplicationMaster可向ResourceManager申请一系列用于运行任务的Container,ApplicationMaster使用ResourceRequest类描述每个Container。一旦为任务构造了Container后,ApplicationMaster会向ResourceManager发送一个AllocateRequest对象,以请求分配这些Container。ResourceManager会为ApplicationMaster返回一个AllocateResponse对象。
步骤3 启动Container。当ApplicationMaster(从ResourceManager端)收到新分配的Container列表后,会向对应的NodeManager发送ContainerLaunchContext以启动Container。
ApplicationMaster会不断重复步骤2~3,直到所有任务运行成功。
如何编写YARN应用程序
下一代Apache Hadoop MapReduce框架的架构
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:45670次
积分:2243
积分:2243
排名:第13509名
原创:143篇
评论:20条
(1)(3)(5)(2)(1)(4)(1)(2)(1)(3)(3)(10)(4)(9)(20)(31)(13)(1)(12)(21)HADOOP 2.0 YARN应用程序的执行流程和开发
我的图书馆
HADOOP 2.0 YARN应用程序的执行流程和开发
&在的官方文档上有一篇很经典的,讲述了如果编写基于&2.0&的应用程序()。本文主要讲述yarn程序的执行流程和如何进行开发的一点想法。
原文地址:
程序的执行流程
是一个资源管理系统,负责整个集群资源的管理和分配。如果需要在一个yarn集群上运行程序:
首先得有个客户端client来提交job到ResourceManager(RM)申请资源。Client通过RMProtocol协议来与RM通信,将应用程序运行所需的一些信息,比如local file/jars,执行的命令,参数,环境变量等提供给RM来运行应用的第一个container也就是ApplicationMaster(AppMaster)。
如果申请到了资源,RM就在第一个container上启动AppMaster。AppMaster然后通过AMRMProtocol协议与ResourceManager通讯,注册自身,然后继续申请资源。
如果获得了containers,AppMaster会通过ContainerManager类与NodeManager通信,为任务启动container。AppMaster同时也会提供启动container需要的一些信息,比如命令行,环境变量等。任务完成后,AppMaster会通过AMRMProtocol::finishApplicationMaster来通知RM任务完成。同时,client可以通过查询RM来获取job的状态信息,或者如果AppMaster支持也可以直接从AppMaster查询信息。如果需要,client可以通过ClientRMProtocol::forceKillApplication来kill掉application。
整个执行流程可以参考下图(来源网络):
client 即客户端,负责将应用程序提交到RM。
AppMaster 即整个应用程序的核心,负责与RM通信,申请资源,启动containers。并监控containers的执行情况,在container执行失败后做failover的处理。
container 就是具体干活的,和具体业务相关的一些处理逻辑。
三个RPC协议
ClientRMProtocol(Client&–&ResourceManager):客户端与RM通信的协议,可以启动AppMater,查询或者kill AppMaster。
AMRMProtocol(ApplicationMaster&–&ResourceManager):AppMaster与RM通信,AppMaster可以向RM注册和注销自己,也可以向RM申请资源以启动container。
ContainerManager(ApplicationMaster&–& NodeManager):AppMaster与NM通信,可以启动或者停止一个container,也可以获取container的执行状态。
Distributed shell
编写yarn应用程序的详细步骤可以直接参考源码自带的distributed shell的例子。distributed shell是在每个节点上执行一条shell命令或者一个脚本,对于理解基本的概念还是很有帮助的。
YARN编程框架的开发
可以看到,一个YARN应用程序的编写,大量的工作是在编写客户端和AppMaster。而AppMaster要处理资源申请,启动和监控,尤其是container的fail
over,这才是真正值得关注的地方。对于大量的应用程序来说,AppMaster的工作机制可能相同,这就可以抽象出一个通用的AppMaster框架。框架的使用者只需要关心自己的具体应用逻辑即container就可以了,可以大大减少开发成本。
其实Yarn已经提供了一个可以直接使用的客户端-MRClienService和AppMaster-MRAppMater。MapReduce也只是Yarn上的一种通用的框架,所以完全可以参考MRAppMaster来实现自己的框架。如类似storm的流式计算框架,或者调度RPC Service的框架,或者支持MPI的框架。目前github上已经有类似的项目出现了,相信不久就会出现一些通用的框架。
发表评论:
TA的最新馆藏

我要回帖

更多关于 yarn监控页面 的文章

 

随机推荐