mapreduce shuffle分析

mapreduce的核心主要是根据map的outputKey进行排序。排序分为内排序和外排序

内排是在堆内排序,主要是buffer在spill到文件中前进行排序,这个排序在map和reduce中都有这部分排序。

外排序是归并排序,是在将由buffer spill到磁盘的许多小文件进行合并时进行的排序,这个排序在map和reduce端都有涉及。

shuffle中的排序是指对map的outputkey和reduce的inputkey进行排序(及只对key进行排序),不对value进行排序。所以我们要写很多的Comparator,或者实现WritableComparator。

在哪些阶段我们需要关心key的比较呢?

1. 使Mapper的outputkey实现WritableComaprable,或者设置Comparator

2. job.setGroupingComparatorClass()

当然我们也需要关心shuffle阶段的 Partitioner

我们知道MapReduce,有个宏观的模式是 “分区(partioner)===》分组(grouping)”

1. partitioner 我们很清楚

2. 分组grouping 是在reduce部分(还有combiner部分)将key-value对进行分组,即产生key-list<value>对,作为reduce函数的输入


二次排序也是基于上述方法实现的



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值