Yarn源码分析之参数mapreduce.job.reduce.slowstart.completedmaps介绍
mapreduce.job.reduce.slowstart.completedmaps是MapReduce编程模型中的一个参数,这个参数的含义是,当Map Task完成的比例达到该值后才会为Reduce Task申请资源,默认是0.05,其在接口MRJobConfig中表示如下:
- // 当Map Task完成的比例达到该值后才会为Reduce Task申请资源,默认是0.05
- public static final String COMPLETED_MAPS_FOR_REDUCE_SLOWSTART = "mapreduce.job.reduce.slowstart.completedmaps";
那么这个参数在Yarn中是如何使用的呢?本文我们将解答这个问题。
既然这个参数的含义是当Map Task完成的比例达到该值后才会为Reduce Task申请资源,那么在Yarn中关于资源分配申请服务的RMContainerAllocator中,自然会用到它。在服务初始化的serviceInit()方法中,有如下代码:
- // reduceSlowStart取参数mapreduce.job.reduce.slowstart.completedmaps,默认为0.05,
- // 其代表当Map Task完成的比例达到该值后才会为Reduce Task申请资源
- reduceSlowStart = conf.getFloat(
- MRJobConfig.COMPLETED_MAPS_FOR_REDUCE_SLOWSTART,
- DEFAULT_COMPLETED_MAPS_PERCENT_FOR_REDUCE_SLOWSTART);
这个reduceSlowStart就代表当Map Task完成的比例达到该值后才会为Reduce Task申请资源,它取参数mapreduce.job.reduce.slowstart.completedmaps,参数未配置时默认为0.05。而在进行Reduce任务相关资源申请调度时,会传入这个reduceSlowStart,如下:
- scheduleReduces(
- getJob().getTotalMaps(), completedMaps,
- scheduledRequests.maps.size(), scheduledRequests.reduces.size(),
- assignedRequests.maps.size(), assignedRequests.reduces.size(),
- mapResourceRequest, reduceResourceRequest,
- pendingReduces.size(),
- maxReduceRampupLimit, reduceSlowStart);
scheduleReduces()方法是专门处理Reduce任务相关资源申请调度的,其中对于reduceSlowStart是按照以下方式进行处理的,如下:
- //check for slow start
- // 在Reduce调度尚未启动时,即标志位reduceStarted为false时
- if (!getIsReduceStarted()) {//not set yet
- // 计算Reduce Task启动时最低要求完成的Map Task数目completedMapsForReduceSlowstar,
- // 计算公式为reduceSlowStart * totalMaps,向上取整,totalMaps表示Map Task总数目
- int completedMapsForReduceSlowstart = (int)Math.ceil(reduceSlowStart *
- totalMaps);
- // 如果已完成Map Task数目completedMaps小于上述要求完成的Map Task数目completedMapsForReduceSlowstart,
- // 记录info级别日志信息:Reduce slow start threshold not met.completedMapsForReduceSlowstart ?
- // 即Reduce任务最低启动门槛没有满足,并输出最低启动门槛,即要求已完成的Map Task数目:completedMapsForReduceSlowstart数目,然后返回,不进行资源申请调度
- if(completedMaps < completedMapsForReduceSlowstart) {
- LOG.info("Reduce slow start threshold not met. " +
- "completedMapsForReduceSlowstart " +
- completedMapsForReduceSlowstart);
- return;
- } else {
- // 如果达到了最低启动门槛,同样记录info级别日志信息:Reduce slow start threshold reached. Scheduling reduces.
- // 即Reduce最低启动门槛已达到,开始调度Reduce
- LOG.info("Reduce slow start threshold reached. Scheduling reduces.");
- // 并设置标志位reduceStarted为true,即该Reduce资源申请已被调度
- setIsReduceStarted(true);
- }
- }
我们看到,在Reduce调度尚未启动时,即标志位reduceStarted为false时:
1、首先计算Reduce Task启动时最低要求完成的Map Task数目completedMapsForReduceSlowstar,计算公式为reduceSlowStart * totalMaps,向上取整,totalMaps表示Map Task总数目;
2、如果已完成Map Task数目completedMaps小于上述要求完成的Map Task数目completedMapsForReduceSlowstart,记录info级别日志信息:Reduce slow start threshold not met.completedMapsForReduceSlowstart * ,即表示Reduce任务最低启动门槛没有满足,并输出最低启动门槛,即要求已完成的Map Task数目:completedMapsForReduceSlowstart数目,然后返回,不进行资源申请调度;
3、如果达到了最低启动门槛,同样记录info级别日志信息:Reduce slow start threshold reached. Scheduling reduces.即Reduce最低启动门槛已达到,开始调度Reduce,并设置标志位reduceStarted为true,即该Reduce资源申请已被调度。
需要特别注意的是,在JobImpl中,如果处于Uber模式下,会将mapreduce.job.reduce.slowstart.completedmaps参数设置为1,这很好理解,因为不管Map Task,还是Reduce Task,均是串行执行的,所以当Map Task完成的比例达到多少值后才会为Reduce Task申请资源,这个值百分百应该是1。处理该参数相关代码如下:
- if (isUber) {
- LOG.info("Uberizing job " + jobId + ": " + numMapTasks + "m+"
- + numReduceTasks + "r tasks (" + dataInputLength
- + " input bytes) will run sequentially on single node.");
- // make sure reduces are scheduled only after all map are completed
- conf.setFloat(MRJobConfig.COMPLETED_MAPS_FOR_REDUCE_SLOWSTART,
- 1.0f);
- //......省略后续相关代码
Yarn源码分析之参数mapreduce.job.reduce.slowstart.completedmaps介绍的更多相关文章
- Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(二)
本文继<Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)>,接着讲述MapReduce作业在MRAppMaster上处理总流程,继上篇讲到作业初始化之后的作 ...
- Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)
我们知道,如果想要在Yarn上运行MapReduce作业,仅需实现一个ApplicationMaster组件即可,而MRAppMaster正是MapReduce在Yarn上ApplicationMas ...
- Yarn源码分析之如何确定作业运行方式Uber or Non-Uber?
在MRAppMaster中,当MapReduce作业初始化时,它会通过作业状态机JobImpl中InitTransition的transition()方法,进行MapReduce作业初始化相关操作,而 ...
- springMVC源码分析--RequestParamMethodArgumentResolver参数解析器(三)
之前两篇博客springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)和springMVC源码解析--HandlerMethodArgumentResol ...
- springMVC源码分析--HttpMessageConverter参数read操作(二)
上一篇博客springMVC源码分析--HttpMessageConverter数据转化(一)中我们简单介绍了一下HttpMessageConverter接口提供的几个方法,主要有以下几个方法: (1 ...
- Yarn源码分析之MRAppMaster:作业运行方式Local、Uber、Non-Uber
基于作业大小因素,MRAppMaster提供了三种作业运行方式:本地Local模式.Uber模式.Non-Uber模式.其中, 1.本地Local模式:通常用于调试: 2.Uber模式:为降低小作业延 ...
- Mybatis源码分析之参数处理
Mybatis对参数的处理是值得推敲的,不然在使用的过程中对发生的一系列错误直接懵逼了. 以前遇到参数绑定相关的错误我就是直接给加@param注解,也稀里糊涂地解决了,但是后来遇到了一些问题推翻了我的 ...
- YARN源码分析(一)-----ApplicationMaster
转自:http://blog.csdn.net/androidlushangderen/article/details/48128955 YARN学习系列:http://blog.csdn.net/A ...
- Mybatis源码分析之参数映射及处理ParameterHandler
ParameterHandler是用来设置参数规则的,当StatementHandler调用prepare方法之后,接下来就是调用它来进行设置参数. ParameterHandler接口: publi ...
随机推荐
- Sublime | 编辑工具Sublime的使用小结
文章目录 Sublime Package & Usage MarkdownEditing MarkdownPreview Usage Key Bindings Setting (语法高亮和ma ...
- cookie的secure、httponly属性设置
cookie的secure.httponly属性设置 转载自:http://www.cnblogs.com/alanzyy/archive/2011/10/14/2212484.html 一.属性说明 ...
- Delphi 获取sqlite中所有的表名
取得sqlite数据库里所有的表名 查询table,type 段是'table',name段是table的名字, so: select name from sqlite_master where ty ...
- [Git] Git 的origin和master分析
转载: http://lishicongli.blog.163.com/blog/static/1468259020132125247302/ 首先要明确一点,对git的操作是围绕3个大的步骤来展开的 ...
- windows server 2012将计算机图标添加到桌面(图文教程)(转)
windows server 2012系统安装完以后桌面默认只有回收站一个图标,如何将window常用的图标(计算机.控制面板.网络.用户文件)的图标添加到桌面呢,下面为作者本人亲测.操作简单至极. ...
- chromatic aberration
https://github.com/keijiro/KinoFringe https://en.wikipedia.org/wiki/Chromatic_aberration 色差偏移 做神经病效果 ...
- diamond淘宝框架使用
转载:http://blog.csdn.net/coolyqq/article/details/50435634 一.概况 diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单.可靠. ...
- git学习——远程仓库操作
查看当前的远程库——git remote 列出了仅仅是远程库的简单名字 可以加上-v 现实对应的克隆地址 添加远程仓库——git remote add [shortname] [url] git re ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-报错0X4650,18000错误怎么办
驱动器未就绪错误,请重启驱动器 注意,即便是报这个错,仍然有可能上电成功,这样的话可以直接在TwinCAT中清除错误即可 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http: ...
- 如何注册ocx文件
32位系统: 将文件放到c:\windows\system目录注册 运行:Regsvr32 c:\windows\system\xxx.ocx取消注册运行:Regsvr32.exe /u c:\win ...