Hive中Join的 MR 底层原理
  TEZNKK3IfmPf 2023年11月12日 37 0

笼统的说,Hive中的Join可分为Common Join(Reduce阶段完成join)和Map Join(Map阶段完成join)。本文简单介绍一下两种join的原理和机制。

一、 Hive Common Join

如果不指定MapJoin或者不符合MapJoin的条件,那么Hive解析器会将Join操作转换成Common Join,即:在Reduce阶段完成join.
整个过程包含Map、Shuffle、Reduce阶段。

  • Map阶段

读取源表的数据,Map输出时候以 Join on 条件中的列为key,如果Join有多个关联键,则以这些关联键的组合作为key;
Map输出的 value 为 join 之后所关心的(select或者where中需要用到的)列;同时在value中还会包含表的 Tag 信息,用于标明此value对应哪个表;
按照key进行排序

  • Shuffle阶段

根据key的值进行hash,并将key/value按照hash值推送至不同的reduce中,这样确保两个表中相同的key位于同一个reduce中

  • Reduce阶段
    根据key的值完成join操作,期间通过Tag来识别不同表中的数据。

以下面的HQL为例,图解其过程:

SELECT
a.id,a.dept,b.age
FROM a join b
ON (a.id = b.id);

Hive中Join的 MR 底层原理

看了这个图,应该知道如何使用MapReduce进行join操作了吧。

二、 Hive Map Join


MapJoin通常用于一个很小的表和一个大表进行 Join 的场景,具体小表有多小,由参数hive.mapjoin.smalltable.filesize来决定,该参数表示小表的总大小,默认值为25000000字节,即25M。
0.7版本之后,默认自动会转换Map Join,由参数 hive.auto.convert.join 来控制,默认为true.
仍然以前面的HQL来说吧,假设a表为一张大表,b为小表,并且hive.auto.convert.join=true,那么Hive在执行时候会自动转化为MapJoin。

Hive中Join的 MR 底层原理

  • 如图中的流程,首先是Task A,它是一个Local Task(在客户端本地执行的Task),负责扫描小表b的数据,将其转换成一个HashTable的数据结构,并写入本地的文件中,之后将该文件加载到DistributeCache中,该HashTable的数据结构可以抽象为:
key value
1 26
2 34

Hive中Join的 MR 底层原理

图中红框圈出了执行Local Task的信息。

  • 接下来是Task B,该任务是一个没有Reduce的MR,启动MapTasks扫描大表a,在Map阶段,根据 a 的每一条记录去和DistributeCache中 b 表对应的 HashTable 关联,并直接输出结果。
  • 由于 MapJoin 没有Reduce,所以由 Map直接输出结果文件,有多少个Map Task,就有多少个结果文件。

转载:lxw的大数据田地 » [一起学Hive]之十-Hive中Join的原理和机制

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月14日   25   0   0 mapjava
  TEZNKK3IfmPf   2023年11月14日   21   0   0 Hive
  TEZNKK3IfmPf   2023年11月14日   61   0   0 mapjava
  TEZNKK3IfmPf   29天前   23   0   0 map集合
  TEZNKK3IfmPf   2023年11月14日   18   0   0 mysqlHive
  TEZNKK3IfmPf   2023年11月14日   30   0   0 Hive视图
  TEZNKK3IfmPf   2023年11月14日   20   0   0 hadoopHive
  TEZNKK3IfmPf   2024年04月26日   61   0   0 hadoopHive
TEZNKK3IfmPf