浅谈MapRuduce的几种Join方式

Reduce Side Joins

Referencehttp://codingjunkie.net/mapreduce-reduce-joins/

在所有的join pattern算法中,reduce-side join时最容易实现的。之所以reduce-side joins这么简单直接,是因为Hadoop会默认将具有相同键(Key)的pair发送到同一个Reducer去执行reduce任务,因此,可以认为Reduce数据已经默认为我们组织好了,这一点不需要我们自己在花费更多的经历去处理。为了执行join操作,我们只需要缓存已经读入keys,同时将其与即将读入的keys进行比较。一旦发现读入的key与已存在的key相匹配,就将相应的key对应的values执行join操作。由于hadoop中所有的数据都是通过网络重新洗牌的(since all of the data is shuffled across the network,因此我们需要对reduce-side join的性能进行权衡。我们需要考虑reduce-side join的两种场景:one-to-oneone-to-many。我们同时也在探索在步需要对keys的来源进行跟踪的解决方案,对于一个key的所有values都会被分到reducer的同一个组中去执行。

Map Side Joins

(Reference:http://codingjunkie.net/mapside-joins/)

Reduce Side Join很容易实现,但是在这种方式需要讲所有的数据都通过网络发送给reducersMap-Side joins不需要将所有数据发送至reducer端由此可以减少大量的网络带宽花费。但是map-side join并没又reduce-side join灵活,map-side join的执行需要满足非常严格的标准。

Map-side join科执行的条件:

要想进行map-side join,输入数据必须能够满足如下两个条件之一:

A. 需要进行join操作的两个数据集合已经按照相同的key被排好序,同时具有相同的数量的partitions;

B. 在需要进行join操作的两个集合里,又一个较小的可以直接被放到内存中。

小结

  map-reduce不只以上所说的量中join方法,对于选择的两篇文章我也只是翻译了其中的理论部分,这两片文章中都有很好的代码实例!
  另外,个人感觉reduce-side join还是很灵活的,其实如果数据量不是特别大的话,完全可以直接选择reduce-side join。
   同时针对不同格式的输入文件,我们还可以对不同输入格式的数据源进行join操作,具体只需要调用hadoop已经实现的MultipleInputs.addInputPath方法就可以具体的输入源对应的PATH、FomartClass、 MapClass,如下方式:
MultipleInputs.addInputPath(job, p, SequenceFileInputFormat.class, JoinLogMapper.class);
其中job就是你要提交的job!
  不断积累,永远相信美好的事即将发生~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值