hadoop计算框架shuffler

在mapper和reducer中间的一个步骤
这里写图片描述
partition,把数据分成一个个区,可以通过程序自定义分区,也可以使用默认的分区,默认规则为哈希模运算,把一个整数模reduce的个数。分区是为了把map的输出数据进行负载均衡,或者解决数据倾斜的问题(节点计算的数据量不均衡,就倾斜)。默认reduce为1,数据量多的时候,reduce为多个。作用是把map的数据分区成一个个reduce区域。
完成partition,sort后,然后merge on disk,合并到磁盘上。默认的合并规则,按照哈希合并,键值相同即可合并,combiner。合并的目的是为了减少map的输出,加快网络之间的copy

reduce和map不在一台机器上,需要copy phase。只copy给需要这台主机reduce的数据。

程序可以控制的地方:分区,排序,combiner。merge不可控

每个map task都有一个内存缓冲区(默认100M),存储着map的输出结果。当缓冲区快满的时候需要将缓冲区的数据以一个临时文件的方式存放到磁盘。溢写是由单独线程来完成,不影响往缓冲区写map结果的线程(spill.percent,默认为0.8)。当溢写线程启动后,需要对这80MB空间内的数据进行排序。
假如client设置过combiner,会将有相同key的key/value的value加起来,减少溢写到磁盘的数据量
当整个map task结束后,再对磁盘中这个map task产生的所有临时文件做合并(merge),对于“”word1“”就像是这样的{“”word1“”,【5,8,2】},假如有combiner,{word1【15】}最终会产生一个文件。
reduce从tasktracker copy数据。
copy过来的数据会先放入内存缓冲区,这里的缓冲区要比map端的更为灵活,基于jvm的heap size设置
merge有三种形式,内存到内存,内存到磁盘,磁盘到磁盘。merge从不同的tasktracker上拿到数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值