Hadoop笔记之map &&shuffle && reduce 工作流程图及其分析
2015-09-16 14:51
253 查看
与其说shuffle为mapreduce之间的独立处理函数 不如说是map中数据输入reduce一通道,因为shuffle一部分属于对map task 另一部分为reduce task
Map函数产生输出时,为了保证I/O效率,采用了先写到内存的环形缓冲区,并做一次预排序,每个Map任务都有一个环形内存缓冲区,(默认大小100MB),一旦缓冲区内数据达到80%(默认比例)的阈值后台程序做两件事
一将缓冲区的内容溢写到磁盘分区中( 在写磁盘之前,线程会跟据数据最终要传达的到Reducer把缓冲区划分(默认按照键)相应的分区.每个分区中,后台线程按键进行内排序.此时如果有一个Combiner.它会在排序后的输出上运行.),在写磁盘的过程中,map函数的输出继续写到缓冲区,直到填满阻塞.
二是新建一个溢出文件,因此在Map任务写完其最后一个输出记录后,会有若干溢出写文件( 如果已经指定Combiner且溢出次数至少为3时,Combiner就会在输出的文件写到磁盘之前运行,不会影响输出结果.Combiner意义在于使Map的输出的中间结果更加紧凑,使得写到本地磁盘和传给Reducer的数据更少(减少网络传输压力,提高数据的传输效率).在Map任务完成之前,溢出写文件被合并成一个已分区且已排序的文件作为map的中间结果,也就是map任务的输出结果.
另外为了提高磁盘I/O性能,可以考虑压缩map的输出,这样会让磁盘写的速度更快,节约磁盘空间从而使传给Reducer的数据量减少.默认情况不压缩的.
shuffle即是数据的清洗,它是消化从map传到Reducer过程中的数据.
如上面所述,map的任务输出结果运行Map任务的TaskTracker所在的结点的本地磁盘上,TaskTracker需要为map输出数据,一个map输出的数据为Reducer一个数据输入分区.由于每个map任务完成的时间不同,所以一旦有一个map的任务被完成,Reducer任务就开始复制其输入,这就是shuffle的Copy阶段,复制完成map的输出,shuffle进入sort排序阶段.此阶段合并map的输出文件.如果有有50个map输出文件,而合并因子为10,合并操作将进行5此,每次将10个文件合并成一个,最终得到5个文件,由于这5个文件不满合并条件(小于合并因子10),则不会合并,直接把5个文件交给reducer函数处理.至此,shuffle阶段完成.
从shuffle的过程可以看出,Map任务处理的是一个InputSplit,二Reduce任务处理的是所有Map任务同一个分区的中间结果
Map函数产生输出时,为了保证I/O效率,采用了先写到内存的环形缓冲区,并做一次预排序,每个Map任务都有一个环形内存缓冲区,(默认大小100MB),一旦缓冲区内数据达到80%(默认比例)的阈值后台程序做两件事
一将缓冲区的内容溢写到磁盘分区中( 在写磁盘之前,线程会跟据数据最终要传达的到Reducer把缓冲区划分(默认按照键)相应的分区.每个分区中,后台线程按键进行内排序.此时如果有一个Combiner.它会在排序后的输出上运行.),在写磁盘的过程中,map函数的输出继续写到缓冲区,直到填满阻塞.
二是新建一个溢出文件,因此在Map任务写完其最后一个输出记录后,会有若干溢出写文件( 如果已经指定Combiner且溢出次数至少为3时,Combiner就会在输出的文件写到磁盘之前运行,不会影响输出结果.Combiner意义在于使Map的输出的中间结果更加紧凑,使得写到本地磁盘和传给Reducer的数据更少(减少网络传输压力,提高数据的传输效率).在Map任务完成之前,溢出写文件被合并成一个已分区且已排序的文件作为map的中间结果,也就是map任务的输出结果.
另外为了提高磁盘I/O性能,可以考虑压缩map的输出,这样会让磁盘写的速度更快,节约磁盘空间从而使传给Reducer的数据量减少.默认情况不压缩的.
shuffle即是数据的清洗,它是消化从map传到Reducer过程中的数据.
如上面所述,map的任务输出结果运行Map任务的TaskTracker所在的结点的本地磁盘上,TaskTracker需要为map输出数据,一个map输出的数据为Reducer一个数据输入分区.由于每个map任务完成的时间不同,所以一旦有一个map的任务被完成,Reducer任务就开始复制其输入,这就是shuffle的Copy阶段,复制完成map的输出,shuffle进入sort排序阶段.此阶段合并map的输出文件.如果有有50个map输出文件,而合并因子为10,合并操作将进行5此,每次将10个文件合并成一个,最终得到5个文件,由于这5个文件不满合并条件(小于合并因子10),则不会合并,直接把5个文件交给reducer函数处理.至此,shuffle阶段完成.
从shuffle的过程可以看出,Map任务处理的是一个InputSplit,二Reduce任务处理的是所有Map任务同一个分区的中间结果
相关文章推荐
- 启动tomcat报异常:java.lang.ClassNotFoundException: javax.xml.rpc.*
- [Elasticsearch] 邻近匹配 (一) - 短语匹配以及slop参数
- 关于 No operations allowed after connection closed.错误
- linux c回调函数
- PDF的box: MediaBox、CropBox、BleedBox、TrimBox和ArtBox
- Linux RHCS 基础维护命令
- Hadoop 简单实现文本全排序
- L7.2 linux shell 条件判断语句
- 基础教程:Linux 新手应该知道的 26 个命令
- Shell命令行操作
- shell脚本实现虚拟机实验环境的简单配置
- RedHat 6.2 Linux修改yum源免费使用CentOS源
- CentOS yum源 部署
- CentOS下常用的 19 条命令
- 64位win7+opencv3.0.0+cuda6.5配置过程
- linux系统查看外网IP
- Cobbler自动批量部署CentOS 6和CentOS 7
- 于linux已安装moodle
- linux 通过 crontab 和 shell 每三秒跑一次check
- openssl建立证书,非常详细配置ssl+apache