HIve map jion的原理、操作和使用场景

一:hive mapjion的使用场景:

1.关联操作中有一张表非常小(有严重的数据倾斜)
2.不等值的链接操作
Join有多个关联键,则以这些关联键的组合作为key;Map输出的value为join之后所关心的(select或者where中需要用到的)列

二:原理

Hive Map Join
MapJoin通常用于一个很小的表和一个大表进行join的场景,具体小表有多小,由参数hive.mapjoin.smalltable.filesize来决定,默认值为25M。满足条件的话Hive在执行时候会自动转化为MapJoin,或使用hint提示 /*+ mapjoin(table) */执行MapJoin。
在这里插入图片描述
解释:
如上图中的流程,
1.Task A在客户端本地执行,负责扫描小表b的数据,将其转换成一个HashTable的数据结构,并写入本地的文件中,
2.将该文件加载到DistributeCache中。
3.Task B任务是一个没有Reduce的MapReduce,启动MapTasks扫描大表a,在Map阶段,根据a的每一条记录去和DistributeCache中b表对应的HashTable关联,并直接输出结果,
因为没有Reduce,所以有多少个Map Task,就有多少个结果文件。
注意:Map JOIN不适合FULL/RIGHT OUTER JOIN。

三:操作

1.配置一下参数,Hive会自动根据SQL选择common join或者是Map Join。

hive (hive)> set hive.auto.convert.join=true;
hive (hive)> set hive.mapjoin.smalltable.filesize=25000000;(默认值就是25MB)

2.我们还可以手动指定使用Map join:

hive (hive)> select /*+mapjoin(post)*/ user.id,user.name,post.pid,post.title from  user
           > join post
           > on user.id =post.uid;

四:优势

1.不消耗集群的reduce资源。

2.减少了reduce操作,加快了程序执行。

3.降低网络负载。

猜你喜欢

转载自blog.csdn.net/qq_43688472/article/details/86063565
今日推荐