MapReduce二次排序(secondary sort)实战

本文介绍了MapReduce中如何实现二次排序,以解决仅按照key排序无法满足需求的情况。通过示例展示了如何使用Python实现Hadoop Streaming程序,并详细解释了相关配置参数的作用,以及如何确保相同key的value能被分配到同一个reducer。二次排序在处理大规模数据时,对于特定场景如多数据join等有重要作用。
摘要由CSDN通过智能技术生成
接触过mapreduce的同学都知道,为了将key值相同的record放在一起,分配给指定reducer,shuffle阶段会按照key值排序。
然而在某些情况下,我们需要同时对value排序,A同学立马提出了如下解决方案:reduce的时候,将同一个key的所有value都存在一个list中,最后再进行排序,这个方案在数据量小时没有问题,可是reducer的内存是有限的,当数据规模很大时,某个key可能会有几万个,几百万个value,上述方案在内存和性能上都是个灾难。
接着B同学灵机一动,既然map阶段按照key值排序,那么就把key和value一起作为新的key,使map输出<key_value, 1>,这样不就得到排序的结果了?但是B同学显然忘了shuffle好的数据是按照整个key来partition到各个reducer的,连接后的新key无法保证原key所有数据分发到同一个reducer上。
这时我们便需要mapreduce的二次排序机制了,二次排序机制其实和B同学的方案思路是相同的,只是在其之上增
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值