常见的离线计算的Join模式分为Reduce Join 和Map Join。MapJoin 处理的表 ,比如一个表比较大(L),一个表比较小(R)。
例如根据用户id,对下图的两个表进行合并操作。当这两个表要按照外键key,进行Join操作的时候,系统该如何做呢?
该方法有一个前提条件,就是R 必须能够Load进内存中。将R放入到(以外键作为key)的哈希表中。然后遍历L,将L中的每个元素都插入到哈希表中,如果哈希表中没有,则不插入,有的话就插入到哈希表中。这样就减少了shuffle网络传输过程和Reduce中的排序过程。
在设计Hive 或者其他的基于Mapreduce模型的SQL的时候,Join方式的不同将大大的影响系统的性能。
阅读(5859) | 评论(2) | 转发(0) |