hadoop的心脏---shuffle详解

为了依旧将来回答面试官的问题
在这里插入图片描述

这个图片就是mapreduce的流程图

然后是map:
在这里插入图片描述
首先我们应该知道默认情况下map的数量是由inputsplit(就是输入分片)的数量决定,然后一个map对应一个环形缓冲区,缓冲区的大小默认是100M然后阈值时80%,到达阈值的时候需要溢写到磁盘,在溢写前需要进行分区,然后对每个分区的数据进行排序,排序后这时combiner的话会进行该操作,对于溢写的数据会有很多小文件,最后map读取完之后会将这些小文件进行合并,到此map端任务结束:
然后如何获得分区数?是由getPartition来的返回值是:
return (key.hashcode() & Inter.MAX_VERLUE) % numReduce)意思就数量是一个key的coude值对reduce的数据进行取余,这样得到的分区数就和reduce的数量一致了
reduce任务端:
在这里插入图片描述
在Reduce端,shuffle主要分为复制Map输出、排序合并两个阶段。
Reduce任务通过HTTP向各个Map任务拖取它所需要的数据。
reduce维护几个copier线程,并行地从map任务机器提取数据。默认情况下有5个copy线程,可以通过mapreduce.reduce.shuffle.parallelcopies配置。

如果map输出的数据足够小,则会被拷贝到reduce任务的JVM内存中。mapreduce.reduce.shuffle.input.buffer.percent配置JVM堆内存的多少比例可以用于存放map任务的输出结果。如果数据太大容不下,则被拷贝到reduce的机器磁盘上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值