您当前的位置:首页 > 互联网百科 > 大数据

【大数据】Hive Join 的原理与机制

时间:2023-05-08 14:22:48  来源:大数据与云原生技术分享  作者:

一、概述

Hive是一个基于Hadoop的数据仓库解决方案,它提供了类似于SQL的查询语言,称为HiveQL,用于处理结构化数据。在Hive中,JOIN操作用于将两个或多个表中的数据连接在一起,以便进行联合查询和分析。

Hive 中 的 Join 可分为 Common Join(Reduce阶段完成join)和 Map Join(Map 阶段完成 join)。

Hive中的JOIN操作是通过MapReduce或Tez任务来执行的,具体的执行过程如下:

  1. 数据分片:Hive将参与JOIN操作的表按照指定的JOIN条件进行分片。每个分片是表的一个子集,用于并行处理。
  2. Map阶段:在Map阶段,Hive会为每个分片创建一个Map任务,并从输入数据中提取JOIN条件所需要的键值对。对于每个键值对,Hive会将键发送到对应的Reducer节点,并将值存储在中间缓存中。
  3. Shuffle阶段:在Shuffle阶段,Hive将具有相同键的键值对发送到相同的Reducer节点。这个过程称为数据洗牌,它确保具有相同键的数据被发送到同一个Reducer节点进行处理。
  4. Reduce阶段:在Reduce阶段,Hive会为每个Reducer节点创建一个Reduce任务。每个Reduce任务接收来自不同MApper节点的具有相同键的键值对,并执行JOIN操作。在JOIN操作中,Hive会根据JOIN条件将具有相同键的记录组合在一起,生成JOIN结果。

【注意】Hive中的JOIN操作是通过两个或多个表的列进行连接的。JOIN条件指定了哪些列用于匹配。Hive支持多种类型的JOIN,包括INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)和FULL JOIN(全连接),可以根据需要选择适当的JOIN类型。

此外,Hive还提供了一些优化技术来提高JOIN操作的性能,例如对表进行分区和对中间结果进行压缩。这些技术可以减少数据移动和存储开销,加快JOIN操作的执行速度。

【总结】Hive中的JOIN操作通过MapReduce或Tez任务进行执行,包括数据分片、Map阶段、Shuffle阶段和Reduce阶段。它使用JOIN条件将具有相同键的记录组合在一起,生成JOIN结果。通过选择适当的JOIN类型和使用优化技术,可以提高JOIN操作的性能。

二、环境准备

如果已经有了环境了,可以忽略,如果想快速部署环境可以参考我这篇文章:通过 Docker-compose 快速部署 Hive 详细教程

# 登录容器
docker exec -it hive-hiveserver2 bash
# 连接hive
beeline -u jdbc:hive2://hive-hiveserver2:10000  -n hadoop

三、Hive JOIN 类型

Hive是一个基于Hadoop的数据仓库工具,用于处理大规模数据集。在Hive中,JOIN是一种常用的操作,用于将两个或多个表中的数据按照指定的条件进行关联。

 

图片

 

Hive支持多种JOIN类型,包括:

 

  • 内连接(inner join 或者简写成 join):只返回两个表中匹配的行。内连接基于一个或多个条件(通常是相等条件),匹配两个表中的行,并将匹配的行返回为结果。只有满足条件的行才会被包含在结果中。

示例:

SELECT *
FROM table1
JOIN table2
ON table1.id = table2.id;
  • 左外连接(left outer join 或者简写成 left join):返回左表中的所有行以及与右表匹配的行。如果右表中没有匹配的行,则对应的结果列将包含NULL值。

示例:

SELECT *
FROM table1
LEFT JOIN table2
ON table1.id = table2.id;
  • 右外连接(right outer join 或者简写成 right join):返回右表中的所有行以及与左表匹配的行。如果左表中没有匹配的行,则对应的结果列将包含NULL值。

示例:

SELECT *
FROM table1
RIGHT JOIN table2
ON table1.id = table2.id;
  • 全外连接(full outer join 或者简写成 full join):返回两个表中的所有行,如果某一行在另一个表中没有匹配,则对应的结果列将包含NULL值。
SELECT *
FROM table1
FULL OUTER JOIN table2
ON table1.id = table2.id;

这些JOIN类型可以根据具体的业务需求选择适当的类型。在Hive中,可以使用JOIN关键字来执行JOIN操作,并指定要连接的表以及连接条件。例如,使用"INNER JOIN"、"LEFT OUTER JOIN"、"RIGHT OUTER JOIN"、"FULL OUTER JOIN"等来指定JOIN类型。

根据具体的需求和数据情况,你可以选择不同的JOIN类型来满足查询需求。

四、Map,Shuffle,Reduce三阶段

 

MapReduce的全套过程分为三个大阶段,分别是Map、Shuffle和Reduce。结合多篇资料,我最终确定划分11个小步骤来描述这个过程,在后续的内容中我也会结合一部分源码来进行剖析。

图片

 

1)Map 阶段

在Map阶段,原始数据被分割成多个大小相同的数据块,每个数据块被分配给一个Map任务处理。Map任务将输入数据转化为一系列键值对,其中键是进行处理的对象,值是相关联的数据。Map阶段的输出结果被保存在本地磁盘上,等待Shuffle阶段的处理。

2)Shuffle阶段

在Shuffle阶段,Map任务的输出结果根据键被分配到不同的Reduce任务进行处理。这个过程称为Shuffle过程。具体来说,每个Map任务会将其输出结果按照键的哈希值分发到多个节点,每个节点对应一个Reduce任务。在Shuffle过程中,数据通过网络传输,需要考虑网络带宽和网络延迟等因素,以确保数据能够及时地到达目标节点。

 

图片

 

3)Reduce阶段

在Reduce阶段,每个Reduce任务将接收到的键值对根据键进行聚合或者排序等操作,然后生成最终的输出结果。同样,在Reduce阶段的输出结果会被保存在本地磁盘上,最终汇总成最终的输出结果。

【总结】可以看出,MapReduce框架中的三个阶段都是分布式的,可以在多台计算机上并行运行。MapReduce框架能够有效地处理大规模数据,并实现高效的分布式计算。由于MapReduce框架的通用性和可伸缩性,因此已经被广泛应用于各种数据处理和机器学习任务。

五、Common Join(Reduce阶段)

在Hive中,常见连接(Common Join)在Reduce阶段进行。当执行常见连接时,Hive会首先对参与连接的表进行Map阶段的处理,将数据按照连接条件进行分组和排序,并将它们发送到不同的Reduce任务中。

  • 在Reduce阶段,每个Reduce任务会接收来自不同表的分组数据,并执行连接操作。具体而言,Reduce任务会对具有相同连接键的记录进行配对,从而实现连接操作。这通常涉及将具有相同连接键的记录组合在一起,以生成最终的连接结果。
  • 在Reduce阶段,Hive使用MapReduce框架来执行常见连接操作。它通过将相同连接键的数据分发到相同的Reduce任务中,实现数据的匹配和连接。这种分布式计算的方式可以有效地处理大规模数据集,并实现高效的连接操作。

需要注意的是,由于常见连接操作在Reduce阶段进行,所以在执行大规模连接操作时,可能会产生大量的中间数据和计算开销。因此,优化连接操作的性能是一个重要的考虑因素,可以通过调整Hive的配置参数、选择适当的连接算法等方式来改善连接操作的性能。

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

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

 

图片

 

六、Map Join(Map 阶段)

 

Map Join 通常用于一个很小的表和一个大表进行 join 的场景,具体小表有多小,由参数hive.mapjoin.smalltable.filesize 来决定,默认值为 25M。满足条件的话 Hive 在执行时候会自动转化为 MapJoin,或使用 hint 提示 /*+ mapjoin(table) */ 执行 MapJoin。

图片

 

如上图中的流程:

 

  • 首先 Task A 在客户端本地执行,负责扫描小表 b 的数据,将其转换成一个HashTable 的数据结构,并写入本地的文件中,之后将该文件加载到 DistributeCache 中。
  • 接下来的 Task B 任务是一个没有 Reduce 的 MapReduce,启动 MapTasks 扫描大表 a,在 Map 阶段,根据 a 的每一条记录去和 DistributeCache 中 b 表对应的 HashTable 关联,并直接输出结果,因为没有 Reduce,所以有多少个 Map Task,就有多少个结果文件。

【注意】Map JOIN 不适合 FULL/RIGHT OUTER JOIN。



Tags:Hive Join   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
【大数据】Hive Join 的原理与机制
一、概述Hive是一个基于Hadoop的数据仓库解决方案,它提供了类似于SQL的查询语言,称为HiveQL,用于处理结构化数据。在Hive中,JOIN操作用于将两个或多个表中的数据连接在一起,以便...【详细内容】
2023-05-08  Search: Hive Join  点击:(124)  评论:(0)  加入收藏
▌简易百科推荐
大数据杀熟何时告别“人人喊打却无可奈何”?
2月7日郑州飞往珠海的航班,不同手机、不同账号搜索该航班显示出不同价格。图源网络有网友近日分享在某平台的购票经历,引发社会广泛关注——用3个账号买同一航班同...【详细内容】
2024-01-30    中国青年网  Tags:大数据杀熟   点击:(32)  评论:(0)  加入收藏
简易百科:到底什么是大数据?
随着互联网的快速发展,大数据已经成为了当今社会最热门的话题之一。那么,到底什么是大数据呢?首先,我们需要明确大数据的定义。大数据是指数据量极大、类型繁多、处理难度高的数...【详细内容】
2024-01-30    简易百科  Tags:大数据   点击:(40)  评论:(0)  加入收藏
数据采集新篇章:AI与大模型的融合应用
开篇在AIGC(人工智能与通用计算)应用中,大型语言模型(LLM)占据着举足轻重的地位。这些模型,如GPT和BERT系列,通过处理和分析庞大的数据集,已经极大地推动了自然语言理解和生成的边界...【详细内容】
2024-01-17  崔皓  51CTO  Tags:数据采集   点击:(51)  评论:(0)  加入收藏
挑战 Spark 和 Flink?大数据技术栈的突围和战争
十年的轮回,正如大数据的发展一般,它既是一个轮回的结束,也是崭新的起点。大数据在过去的二十年中蓬勃发展,从无到有,崛起为最具爆炸性的技术领域之一,逐渐演变成为每个企业不可或...【详细内容】
2024-01-17  InfoQ    Tags:大数据   点击:(40)  评论:(0)  加入收藏
分布式存储系统在大数据处理中扮演着怎样的角色?
如果存储节点本身可以定制,则通常会让其支持部分计算能力,以利用数据的亲和性,将部分计算下推到相关的存储节点上。如果存储是云上的 S3 等对象存储,无法定制,则通常会将数据在计...【详细内容】
2023-12-19  木鸟杂记  微信公众号  Tags:大数据   点击:(48)  评论:(0)  加入收藏
大数据如何实时拯救生命:车联网的数据分析有助预防交通事故
译者 | 李睿审校 | 重楼车联网(IoV)是汽车行业与物联网相结合的产物。预计车联网数据规模将越来越大,尤其是当电动汽车成为汽车市场新的增长引擎。问题是:用户的数据平台准备...【详细内容】
2023-12-19    51CTO  Tags:大数据   点击:(41)  评论:(0)  加入收藏
利用生成对抗网络进行匿名化数据处理
在互联网时代,数据日益成为人们的生产资料。然而,在某些情况下,我们需要分享数据,但又需要保护个人隐私。这时,匿名化技术就显得尤为重要。本文将介绍利用生成对抗网络进行匿名化...【详细内容】
2023-12-18  技巧达人小影    Tags:数据处理   点击:(57)  评论:(0)  加入收藏
盘点那些常见的数据中心类型,你知道几个?
在数字化潮流的浪潮下,数据中心如同企业的神经系统,关系到业务的稳健运转。而在这个巨大的网络中,各种数据中心类型如雨后春笋般崭露头角。从企业级的个性至云数据中心的虚拟化...【详细内容】
2023-12-07  数据中心之家  微信公众号  Tags:数据中心   点击:(65)  评论:(0)  加入收藏
数据中心的七个关键特征
随着信息技术的不断演进,数据中心的可靠性、可扩展性、高效性、安全性、灵活性、管理性和可持续性成为业界探讨的焦点。下面让我们一同深入剖析这些关键特征,了解它们是如何影...【详细内容】
2023-12-06  数据中心之家  微信公众号  Tags:数据   点击:(63)  评论:(0)  加入收藏
什么是数据解析?将数据转化为更好的决策
什么是数据解析?数据解析是一门专注于从数据中获取洞察力的学科。它包含数据分析(data analysis)和管理的流程、工具和技术,包括数据的收集、组织和存储。数据解析的主要目的是...【详细内容】
2023-12-06  计算机世界    Tags:数据解析   点击:(62)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条