reduce side join :
在map 阶段,map 函数同时读取两个文件File1 和File2,为了区分
两种来源的key/value 数据对,对每条数据打一个标签(tag),比如:tag=0 表示来自文件File1,
tag=2 表示来自文件File2。
map side join :
Map side join 是针对以下场景进行的优化:两个待连接表中,有一个表非常大,而另一个表非常小,以至于小表可以直接存放到内存中。这样,我们可以将小表复制多份,让每个map task 内存中存在一份(比如存放到hash table 中),然后只扫描大表:对于大表中的每一条记录key/value,在hash table 中查找是否有相同的key 的记录,如果有,
则连接后输出即可。
Semi Join :
Semi Join,也叫半连接,是从分布式数据库中借鉴过来的方法。它的产生动机是:对于reduce side join,跨机器的数据传输量非常大,这成了join 操作的一个瓶颈,
如果能够在map 端过滤掉不会参加join 操作的数据,则可以大大节省网络IO。
reduce side join + BloomFilter :
BloomFilter 最常见的作用是:判断某个元素是否在一个集合里面。它最重要的两个方法是:add() 和contains()。最大的特点是不会存在 falsenegative,即:如果contains()返回false,则该元素一定不在集合中,但会存在一定的 falsepositive,即:如果contains()返回true,则该元素一定可能在集合中。