mapreduce

总流程

1.首先启动MRAppMaster,根据job的描述信息,计算所需要的maptask的数量,向集群请求启动maptask
2. 通过定义的map()方法将数据处理成

mapTask

maptask的数量默认是由待处理数据的逻辑切片决定,每个逻辑切片对应一个maptask。
切片的大小默认等于block的大小,切片的时候部考虑数据整体,而是分别对每一个文件进行单独的切片。例如
文件1 大小为100M
文件2 大小为1M
默认的block大小为60M
最后的切片结果为
切片1 大小为60M
切片2 大小为40M
切片3 大小为1M

FileInputFormat中,计算切片大小的逻辑:Math.max(minSize, Math.min(maxSize, blockSize))
maxsize(切片最大值):
参数如果调得比blocksize小,则会让切片变小,而且就等于配置的这个参数的值
minsize (切片最小值):
参数调的比blockSize大,则可以让切片变得比blocksize还大

另外还可以通过设置参数mapred.map.tasks来设置程序员期望的map个数,这个数字只有在大于default_num的时候才会生效

reducetask

与maptask的并发数由切片数决定不同,Reducetask数量可以直接手动设置
如果计算全局的汇总结果则只能有一个reducetask
如果map()阶段最终的结果分类与reducetask个数相同则每个reducetask对应一个分类
如果map()阶段最终结果分类小于reducetask个数,则多余的reducetask产生空文件
如果map()阶段最终而就够分类大于reducetask个数,默认情况下是按hashcode与reducetask个数取余进行分配

shuffle

map阶段处理的数据如何传递给reduce阶段,这个流程就叫做shuffle
1. maptask收集我们的map()方法输出的kv对,放到内存缓冲区中
2. reducetask根据自己的分区号,去各个maptask机器上取相应的结果分区数据
3. reducetask会取到同一个分区的来自不同maptask的结果文件,reducetask会将这些文件再进行合并(归并排序)
4. 合并成大文件后,shuffle的过程也就结束了,后面进入reducetask的逻辑运算过程

combiner

combiner组件的父类就是Reducer, combiner和reducer的区别在于运行的位置:Combiner是在每一个maptask所在的节点运行,Reducer是接收全局所有Mapper的输出结果;
combiner对每一个maptask的输出进行局部汇总,以减小网络传输量

partioner

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值