设为首页 收藏本站
查看: 754|回复: 0

[经验分享] Hadoop之yarn的工作流程

[复制链接]

尚未签到

发表于 2016-12-10 07:01:42 | 显示全部楼层 |阅读模式
  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种资源)



  

   DSC0000.jpg
  来源: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插件,可以查看应用程序的相关信息:   DSC0001.jpg

  

  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比较多,有些任务就比较占内存,所以要根据任务的特点合理的利用计算机资源。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312007-1-1.html 上篇帖子: 与 Hadoop 对比,如何看待 Spark 技术? 下篇帖子: FATAL org.apache.hadoop.hbase.master.HMaster: Unhandled exception
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表