Hive中Join的原理和机制
笼统的说,Hive中的Join可分为Common Join(Reduce阶段完成join)和Map Join(Map阶段完成join)。本文简单介绍一下两种join的原理和机制。
1 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);
看了这个图,应该知道如何使用MapReduce进行join操作了吧。
2 Hive Map Join
MapJoin通常用于一个很小的表和一个大表进行join的场景,具体小表有多小,由参数hive.mapjoin.smalltable.filesize来决定,该参数表示小表的总大小,默认值为25000000字节,即25M。
Hive0.7之前,需要使用hint提示 /*+ mapjoin(table) */才会执行MapJoin,否则执行Common Join,但在0.7版本之后,默认自动会转换Map Join,由参数hive.auto.convert.join来控制,默认为true.
仍然以9.1中的HQL来说吧,假设a表为一张大表,b为小表,并且hive.auto.convert.join=true,那么Hive在执行时候会自动转化为MapJoin。
- 如图中的流程,首先是Task A,它是一个Local Task(在客户端本地执行的Task),负责扫描小表b的数据,将其转换成一个HashTable的数据结构,并写入本地的文件中,之后将该文件加载到DistributeCache中,该HashTable的数据结构可以抽象为:
key | value |
1 | 26 |
2 | 34 |
图中红框圈出了执行Local Task的信息。
- 接下来是Task B,该任务是一个没有Reduce的MR,启动MapTasks扫描大表a,在Map阶段,根据a的每一条记录去和DistributeCache中b表对应的HashTable关联,并直接输出结果。
- 由于MapJoin没有Reduce,所以由Map直接输出结果文件,有多少个Map Task,就有多少个结果文件
文章转自:http://lxw1234.com/archives/2015/06/313.htm
相关推荐
总结来说,HiveSQL编译原理是Hive处理SQL查询的核心机制,它包括词法分析、语法分析、逻辑规划、优化、物理规划和执行等多个阶段。理解这一原理对于提升Hive查询性能、优化大数据处理流程具有重要意义。在实际工作中...
总的来说,理解Hive的优化策略和执行原理对于提升查询性能至关重要。通过对SQL语句的精心设计和对集群配置的适当调整,可以有效地处理大规模数据查询。同时,随着Hive与其他计算框架如Spark的融合,其执行效率和灵活...
- **操作符**:Hive执行的基本单位,每个操作符对应一个特定的功能,例如TableScanOperator负责从表中读取数据,JoinOperator负责连接两个数据集。 - **执行计划**:操作符按照一定的顺序组合而成的计划,描述了Hive...
在Hive中,实现两个表的Join操作通常涉及到以下步骤: - 在Map阶段,为来自不同表的数据打上标记(tag),这些标记会被添加到Map输出的Value中。 - 在Reduce阶段,根据标记来判断数据来源并进行相应的Join操作。 ...
2. **解决性能瓶颈**:理解 Hive 的内部机制有助于诊断和解决性能问题。 3. **SQL优化技巧**:熟悉 Hive 的执行流程可以帮助编写更高效的 SQL 语句,如合理使用索引、优化 Join 语句等。 4. **定制需求**:针对特定...
- **Join的实现原理**:在Hive中,Join操作通常通过MapReduce来实现。例如,在一个内连接中,Map阶段将不同表的数据分别标记,然后在Reduce阶段,依据标记判断并合并来自不同表的记录。这种方法确保了JOIN操作的...
例如,可以使用`SELECT`语句从Hive表中提取数据,`JOIN`操作用于合并多个表的数据,`GROUP BY`和`HAVING`用于数据分组和过滤。 3. **元数据**:Hive MetaStore存储了关于Hive表的所有元数据,如表名、列名、分区...
总的来说,学习 Hive 的实现原理有助于我们更好地理解大数据处理背后的机制,从而更好地利用 Hive 进行数据分析和管理,尤其是在面对淘宝这样的大型电商平台海量数据时,有效运用 Hive 可以极大地提升数据处理效率。
学习者需要掌握不同数据类型的操作,理解Hive的数据存储机制,如TextFile、SequenceFile、Orc和Parquet等。 4. **Hive数据定义**:讲解如何创建、查询、修改和删除数据库及表,包括分区表和桶表的创建。学生将学会...
通过阅读和理解这份官方文档,你将能够掌握Hive的基本操作,理解其工作原理,并学会如何在实际项目中有效地应用Hive进行大数据分析。同时,Hive的使用需要结合Hadoop的生态系统,例如HDFS的数据存储和YARN的任务调度...
在本文中,我们将深入探讨Hive 1.2.2的源代码,解析其核心组件和工作原理,以便更好地理解和优化使用。 一、Hive架构与组件 Hive的核心架构由多个组件构成,包括Hive Metastore、Hive Server、HQL解析器、编译器、...
在"apache-hive-1.2.1源码包"中,我们可以深入理解Hive的内部工作原理以及其如何与Hadoop生态系统协同工作。 1. **Hive架构** Hive的核心组件包括Metastore、Driver、Compiler、Executor和HMS(Hive Metastore ...
3. **Hive与Spark集成**:Spark作为更快的计算框架,与Hive集成后,能提升查询效率,尤其是在复杂的Join和Group By操作中。 4. **Hive的ACID特性**:从Hive 3.0版本开始,Hive支持事务(transaction)、原子性...
Hive是Apache软件基金会开发的一个数据仓库工具,它允许用户使用SQL-like...尽管它可能没有最新版本的功能丰富,但对于学习和理解Hive的基本原理和操作,以及大数据处理的基础概念,Hive-0.8.1仍具有重要的参考价值。
大小表Join原理 - **概念**:在Hive中执行Join操作时,如果其中一个表的数据量远小于另一个表,则可以使用“小表”进行广播(Broadcast Join),以减少数据传输成本。 - **优点**:显著降低Shuffle阶段的数据传输量...
随着大数据技术的发展,Hive作为Hadoop生态系统中的一个重要组成部分,对于企业的数据分析和处理起着核心作用。Facebook、淘宝等大型互联网公司均采用Hive进行大规模的数据分析,尤其是在离线统计领域,Hive的应用...
在"apache-hive-2.1.1-src"这个压缩包中,包含了Hive 2.1.1版本的源代码,这对于开发者和数据分析师来说是一个宝贵的资源,可以深入了解Hive的工作原理,并对其进行定制或扩展。 1. **Hive架构**:Hive的核心架构...
1. **Hadoop 环境**:首先,书中可能会介绍 Hadoop 生态系统的基础知识,包括 MapReduce、HDFS 和 YARN,这些都是理解 Hive 工作原理的前提。 2. **Hive 架构**:详细阐述 Hive 的组件,如元数据存储(通常使用 ...
Hive的设计目标是提供一种简单的数据提取、转化和加载(ETL)机制,并支持大规模数据分析。 1. **Hive架构** Hive的核心架构包括客户端、元数据存储、驱动器、编译器、执行器等组件。客户端是用户与Hive交互的接口...
Hive 存储数据时,默认使用 HDFS,其执行引擎主要是 MapReduce,尽管后来版本中也支持 Tez 和 Spark。 **1.2 Hive 的优缺点** 1.2.1 优点 - 用户友好的 SQL 接口:Hive 使用类 SQL 语法,便于开发和理解。 - 减少...