大数据|MapReduce工作机制
MapReduce工作流程
【大数据|MapReduce工作机制】
文章图片
1、InputFormat根据job提供的文件目录,对目录下面的文件进行遍历
2、首先遍历第一个文件
- 获取文件的大小
- 获取切片大小
文章图片
上面的源码就是切片大小的计算公式,blocksize为块的大小;如果job运行在本地,默认块大小是32M;如果job运行在yarn上,hadoop1.x 默认块大小是64M;hadoop2.x 默认块大小是128M。
minSize=1 maxSize=long.max_value
先对块大小和maxSize取最小值,最小值为块大小;再对块大小和minSize取最大值,得到最大值为块大小;所以一般情况下,切片大小为块的大小128M。
如果想要增加切片大小,可以设置minSize>128M
如果想要减小切片大小,可以设置maxSize<128M
- 对文件进行切片,假设第一个文件300M
第一个切片:0-128M
第二个切片:128-256M
第三个切片:256-300M
1、每次切完片都会对剩下文件的大小进行判断,如果剩余文件大小没有超过块大小的1.1倍,超过1.1继续切片,没有超过则将剩余的文件当成一个切片。
举例:一个文件260M,第一个切片0-128,剩余132M,132<128*1.1,所以剩下的132M被分为一个切片;该文件一共2个切片,第一个128M,第二个132M
2、在进行切片的时候,如果一个单词在一行中没有写完,那么切片的时候,就会跳到下一行,把该单词读取完整,不会出现把一个单词分成两个部分的情况。
- 分区数量可以通过设置reducetask的数量来决定,有几个reducetask就有几个分区
- 系统默认按照map输出key 的hashcode进行排序
文章图片
Key的hashcode按位与Integer的最大值,保证hash值不为负数;再对ReduceTasks的数量取余,numReduceTasks默认是1,所以我们不设置的话,默认是一个分区;
- 当我们设置多个分区的时候,按照hashcode来进行分区,就有可能产生数据偏移现象;一个分区的数据很多,另一个分区的数据很少,导致reduce一个很忙,一个很闲。这个时候我们就可以通过对数据加盐或者再hash的方式,对数据进行打散,减少出现数据偏移的情况
15、进入reduce程序,对分组后的数据进行逻辑处理,每组相同的key只会进入一次reduce 16、最后Reduce得到的结果通过OutputFormat输出到文件中
推荐阅读
- 我要做大厨
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 知识
- 三十年后的广场舞大爷
- 奔向你的城市
- 村里的故事|村里的故事 --赵大头
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 华为旁!大社区、地铁新盘,佳兆业城市广场五期!
- 汇讲-勇于突破