MapReduce 图解流程超详细解答(2)-【map阶段】
接上一篇讲解:http://blog.csdn.net/mrcharles/article/details/50465626
map任务:溢写阶段
MapTask.MapOutputBuffer
)。缓冲区的大小是固定的,通过mapreduce.task.io.sort.mb
(default:100MB)指定。
mapreduce.map.
sort.spill.percent
: 默认80% ),溢写将会被执行(这是一个并行过程,使用的是单独的线程,缓冲池还可以继续被写入)。如果溢写线程太慢,而缓冲区又忙了的话,map()就会暂停执行而等待。- 创建一个溢写记录
SpillRecord
和一个FSOutputStream
文件输出流(本地文件系统) - 内存内排序缓冲中的块:输出的数据会使用快排算法按照partitionIdx,
key排序 - 排序之后的输出会分割成为分区:每一个分区对应一个reduce
- 分区序列化写到本地文件
有多少个reduce任务呢?
一个job的ReduceTasks 的数量是通过配置mapreduce.job.reduces参数设置的
一个输出元组的分割指数是多少?
输出元组的分割指数指的是分区的指数。在 Mapper.Context.write()内部被指定:
partitionIdx = (key.hashCode() & Integer.MAX_VALUE) % numReducers
随着输出元组以元数据的形式保存在环形缓冲区。用户可以通过配置mapreduce.job.partitioner.class参数自己定制partitioner
我们什么时候运行combiner
如果用户制定了一个特定的combiner ,那么,在溢写线程写出到文件之前,会在每一个分区含有元组数据的地方执行combiner 通常,我们做了如下事情:
- 创建一个用户指定的Reducer.class实例(用户指定的combiner )
- 创建一个Reducer.Context:输出将会保存在本地文件系统
- 运行Reduce.run():请看reduce
任务的描述
Map任务:执行结束
在执行阶段结束的时候,溢写线程最后被触发,细节上,我们作如下事情:
- 排序,溢写最后没有被溢写的元组数据
- 开始SHUFFLE 相
map执行后时期:洗牌shuffle
在一个map任务完成的最后时刻,所有的溢写文件会被合并一个分区文件,与相应的reducer对应。mapreduce.io.sort.merge参数控制合并流一次的数量,默认是100。如果至少有3个溢写文件,combiner将会再次执行。如果只有一个或者两个溢写文件,再次执行combiner从而减少map输出的数据量的大小已经没有什么效果,没有必要再次执行combiner了。分区输出文件通过http的方式提供给reducer。
Merger合并
略粗糙,望帮助大家
MapReduce 图解流程超详细解答(2)-【map阶段】的更多相关文章
- MapReduce 图解流程超详细解答(1)-【map阶段】
转自:http://www.open-open.com/lib/view/open1453097241308.html 在MapReduce中,一个YARN 应用被称作一个job, MapReduc ...
- CF468C Hack it! 超详细解答
CF468C Hack it! 超详细解答 构造+数学推导 原文极简体验 CF468C Hack it! 题目简化: 令\(f(x)\)表示\(x\)在十进制下各位数字之和 给定一整数\(a\)构造\ ...
- MapReduce 图解流程
Anatomy of a MapReduce Job In MapReduce, a YARN application is called a Job. The implementation of t ...
- JDK的下载及安装教程图解(超详细哦~)
一.本人电脑系统介绍及JDK下载途径 1.先说明一下我的电脑为win10系统,64位操作系统~ 2.我选择下载的JDK版本为1.8版本.给大家来两个下载渠道,方便大家的下载~ JDK官网:https: ...
- MapReduce与Yarn 的详细工作流程分析
MapReduce详细工作流程之Map阶段 如上图所示 首先有一个200M的待处理文件 切片:在客户端提交之前,根据参数配置,进行任务规划,将文件按128M每块进行切片 提交:提交可以提交到本地工作环 ...
- [转]超详细图解:自己架设NuGet服务器
本文转自:http://diaosbook.com/Post/2012/12/15/setup-private-nuget-server 超详细图解:自己架设NuGet服务器 汪宇杰 ...
- SVN入门图解教程(超详细)
SVN入门图解教程(超详细) 一.总结 一句话总结: 二.SVN入门教程 1. 什么是SVN SVN全名Subversion,即版本控制系统.SVN与CVS一样,是一个跨平台的软件,支持大多数常见的操 ...
- 超详细SQL SERVER 2016跨网段和局域网发布订阅配置图解和常见问题
原文:超详细SQL SERVER 2016跨网段和局域网发布订阅配置图解和常见问题 转载标明出处:http://blog.csdn.net/u012861467 前方高能,要有点耐心,图片较多,注意在 ...
- Linux服务器上迁移项目路径,修改nginx配置,迁移及备份MongoDB数据库流程 (超详细)!!!
缘由:客户服务器项目路径不是很合理,导致Jenkins自动部署时还需要添加路径后再更新部署,所以需要把项目路径统一和规范化. 迁移项目路径,保证路径合规,同时做好备份和迁移.迁移后先安装好依赖. 项目 ...
随机推荐
- android studio toolbar遮挡住下面控件内容
只需要在该控件布局(content_***.xml)加入: app:layout_behavior="@string/appbar_scrolling_view_behavior" ...
- Java中怎样实现字符串截取
使用substring()对字符串进行截取: /** * str.indexOf()查找下标 * substring();//字符串截取 * length();//字符串长度 * */ @Test p ...
- MySQL基本命令脚本
一.基本命令 1.启动服务 说明:以管理员身份运行cmd 格式:net start 服务名称 示例:net start mysql57 2.停止服务 说明:以管理员身份运行cmd 格式:net sto ...
- java中的break continue
break语句 在任何循环语句的主体部分,均可用break控制循环的流程.break用于强行退出循环,不执行循环中剩余的语句.(break语句也在switch语句中使用) public class B ...
- Windows 关闭win32 控制台
{ fclose(pf); BOOL ret = FreeConsole(); }
- 【转载】opencl中设备内存
地址空间限定符 一般的内核代码中,里面的内核参数或声明变量时,都会有地址空间限定符 地址空间限定符,地址空间限定符的主要作用是指出数据应该保存在哪个地方 地址空间限定符有4个: 全局内存: 限定符:_ ...
- Systm.IO.File.cs
ylbtech-Systm.IO.File.cs 1.程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5619 ...
- js基础应用-打字机,震动窗口
js基础应用一,窗口震动 html+js代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...
- Python flask 构建可扩展的restful apl✍✍✍
Python flask 构建可扩展的restful apl 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...
- Python Fabric模块详解
Python Fabric模块详解 什么是Fabric? 简单介绍一下: Fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率. 再具体点介绍一下,Fabri ...