Hadoop Shuffle 原理(大数据面试高频五)

  1. map 方法之后,reduce 方法之前这段处理过程叫shuffle
  2. map方法之后,数据首先进入到分区方法,把数据标记好分区,然后把数据发送给环形缓冲区,环形缓冲区默认大小100M,环形缓冲区到达80%时,进行溢写;溢写前对数据进行排序(快排),排序按照对key的索引进行字典顺序排序;溢写产生大量溢写文件,需要对溢写文件进行归并排序;对溢写的文件也可以进行Combiner操作,前提是汇总操作,求平均值不行。最后将文件按照分区存储到磁盘,等待reduce端拉取。
  3. 每个reducer拉取map端对应分区的数据。拉取数据后先存储到内存中,内存不够了,再存储到磁盘,拉去玩所有数据后,采用归并排序将内存和磁盘中的数据都进行排序。在进入reduce方法前,可以对数据进行分组操作。

          相关细节:

  1. maptask 执行,收集maptask 的输出数据,将数据写入环形缓冲区中,记录起始偏移量。
  2. 环形缓冲区大小100m,当数据达到80m时,记录终止偏移量。
  3. 将数据进行分区(默认分组根据key的hash值%reduce数量进行分区),分区内进行快速排序。
  4. 分区、排序结束后,将数据刷写道磁盘(这个过程,maptask输出的数据写入剩余20%环形缓冲区,同样需要记录起始偏移量)。
  5. maptask结束后将形成的多个小文件做归并排序合并成一个大文件。
  6. 当有一个maptask执行完成后,reducetask启动。
  7. reducetask到执行完成maptask的机器上拉取属于自己分区的数据。
  8. reducetask将拉去过来的数据“分组”,每组数据调用一次reduce()方法。
  9. 执行reduce逻辑,将结果输出到文件。

        另:combine函数的作用?

        combine分为map端和reduce端,作用是把同一个key的键值对合并在一起,可以自定义的。combine函数把一个map函数产生的<key,value>对(多个key,value)合并成一个新的<key2,value2>,将新的<key2,value2>作为输入到reduce函数中。这个value2也可以称之为values,因为有多个。这个合并的目的是为了减少网络传输。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值