MR实现Join的方式

一、Join的实现

Map Join就不做描述了,这里主要描述Reduce Join,基本思路是在Map端对多个数据源的数据打上Tag,然后把Join的key当作map输出的key,以保证相同的key可以到达相同的reduce。

我们采取用如下技术来实现:

  1. Mutiple inputs

    不同数据源的数据的格式可能不同,利用MultipleInputs这个类可以方便地解析和标记tag。

  2. Secondary Sort

    我们把不同数据源的数据发送到相同的reduce后,最好保证数据可以按照<key,tag>排序,因为如果是乱序的,我们就必须缓存所有数据到内存,这样可能会诱发OOM。

    而二次排序刚好可以帮助我们按照key和tag排好序

    思考:如果是我实现join,我还会按照数据量排一下序,数据量可以通过hive的CBO优化的直方图拿到,让数据量小的在前面,缓存到内存。不管是left join还是right join,都可以这样做,做shuffle的组合key是<key, tag, size, isBase>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值