mr程序实现map side join和reduce side join原理

前提:两个表进行inner join

1、map side join

效率比reduce side join高,不会产生shuffle

第一步:使用DistributeCache.addCacheFile将一个文件分布式的缓存到每一台机器本地,这一步要在job启动之前设置,也就是在启动函数内job 设置之前(main函数里)。

第二步:使用getLocalCacheFiles获取文件,这一步是在setUp方法里面,然后获取到每一行数据,将每一行数据使用局部变量HashMap存储

第三步:在Mapper方法里面获取到hdfs上的一个文件,读取内容,join的on条件即为hashmap的key以及读取文件的某个字段,然后做逻辑判断,最后context.write将数据写出,如果输出多个字段,使用javabean封装即可,但是javabean需要实现WritableCompare进行序列化输入输出。

2.reduce side join

会产生shuffle,效率比较慢。

第一步mapper函数:使用mapper函数读取所有文件,每个文件有不同之处,比如字段个数不一样等,根据这些可以去设置每行内容所属的文件,获取到每行之后将每行内容set到javabean中,使用context.write(NullWritable.get(),JavaBean)输出

第二步reduce:接收到数据之后按照文件标识获取内容,可以使用equals判断on条件,然后进行数据封装输出即可。

转载于:https://my.oschina.net/lzhaoqiang/blog/3064064

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值