上一篇《》大家可以点击回顾該篇文章。本文是MapReduce系列第二篇
一、在Map端进行连接
使用场景:一张表十分小、一张表很大。
用法:在提交作业的时候先将小表文件放到该作業的DistributedCache中然后从DistributeCache中取出该小表进行join key / value解释分割放到内存中(可以放大Hash Map等等容器中)。然后扫描大表看大表中的每条记录的join key /value值是否能够在内存中找到相同join key的记录,如果有则直接输出型结果
直接上代码,比较简单:
这里还说说SemiJoin也是有一定的适用范围的其抽取出来进行join的key是要放到内存中的,所以不能够太大容易在Map端造成OOM。
blog介绍了三种join方式这三种join方式适用于不同的场景,其处理效率上的相差还是蛮大的其Φ主要导致因素是网络传输。Map join效率最高其次是SemiJoin,最低的是reduce join另外,写分布式大数据处理程序的时最好要对整体要处理的数据分布情况作┅个了解这可以提高我们代码的效率,使数据的倾斜度降到最低使我们的代码倾向性更好。
本文写作过程中参考了相关技术文章在此感谢上海尚学堂老师的帮助。