理解Hive Map join

Map阶段进行表之间的连接。而不需要进入 Reduce 阶段才进行连接。这样就节省了在Shuffle阶段时要进行的大量数据传输。从而起到了优化作业的作用。

即在map端进行join,其原理是 broadcast join,即把小表作为一个完整的驱动表来进行join操作。除了一份表的数据分布在不同的Map中外,其他连接的表的数据(小表)必须在每个Map中有完整的拷贝。 Map Join会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map是进行了join操作,省去了 reduce运行的效率也会高很多。
适合在二个要连接的表中,有一个很大,有一个很小,这个小表可以存放在内存中而不影响性能。这样我们就把小表文件复制到每一个Map任务的本地,再让Map把文件读到内存中待用。

任务执行过程(下图)
Task A: 把小表加载到内存中待用;
Task B: 进行Map端的join,一个大表数据放在多个Map执行,每个map都会去内存中找小表进行key比较,相等则进行连接,输出结果。

猜你喜欢

转载自blog.csdn.net/wilde123/article/details/118852564