Hadoop之YARN及运行流程
来源:互联网 发布:查号淘宝信誉131458 编辑:程序博客网 时间:2024/05/13 19:42
YARN是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
YARN通用资源管理框架组成部分:
2,ApplicationMaster(AM):主要与RM协商获取应用程序所需资源。实际的资源都在NM中,所以AM和NM合作,在NM中运行任务,AM和MapReduce TASK都运行在Container中,Container由RM调度(启动/停止)并由NM(NodeManager)管理,监控所有Task的运行情况,在任务运行失败时,重新为任务申请资源以启动任务。
3,Nodemanager(NM):用来启动和监控本地计算机资源单位Container的利用情况,是每个节点上的资源和任务管理器,定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态,并且接受并处理来自AM的Container启动/停止等请求。
4,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
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):
@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: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结束后该方法返回。轮询时间间隔可以用配置文件的属性mapreduce.client.completion.pollinterval来设置
7:应用程序运行完成后, MRAppMaster向ResourceManager注销并关闭自己。
YARN能够调度CPU和内存,有些任务使用CPU比较多,有些任务就比较占内存,所以要根据任务的特点合理的利用计算机资源。
- Hadoop之YARN及运行流程
- hadoop--之YARN框架流程
- Spark on Yarn解密及运行流程
- Hadoop入门之Yarn调度MR流程
- 走向云计算之Hadoop YARN的基本原理和运行流程
- Hadoop 2.x环境搭建之三配置部署启动YARN及在YARN上运行MapReduce程序
- Hadoop - YARN 启动流程
- Hadoop YARN工作流程
- Hadoop Yarn工作流程
- Hadoop伪分布式运行及YARN的初始化
- Hadoop源码解析之YARN客户端作业提交流程
- Hadoop源码解析之YARN服务端作业提交流程
- Hadoop之YARN在单节点上运行
- Hadoop Yarn的工作流程
- Hadoop YARN的工作流程
- hadoop初识之三:搭建hadoop环境(配置HDFS,Yarn及mapreduce 运行在yarn)上及三种运行模式(本地模式,伪分布式和分布式介)
- Hadoop之YARN命令
- Hadoop之YARN
- ueditor 后端配置项没有正常加载,上传插件不能正常使用!jsp版本
- android自定义加载框
- bootstrap css语法,javascript
- Android内存管理详细介绍 native heap dalvikheap 超有用的!!!!!!
- OpenGL中各种坐标系的理解
- Hadoop之YARN及运行流程
- 背包九讲
- 函数返回值为数组
- 一切成功源于积累——20150721 721欧美惨案 一周最大单日涨幅 1600点 重仓没有好下场
- 【飞控学习】APM和PX4飞控源码下载及安装
- 关于IE
- 在windows下安装OpenDaylight的Helium(氦)版本
- set集合的排序
- ubuntu jdk环境配置