`

Hive中Join的原理和机制

    博客分类:
  • hive
阅读更多

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为例,图解其过程:

  1. SELECT
  2. a.id,a.dept,b.age
  3. FROM a join b
  4. ON (a.id = b.id);

Hive Common Join

看了这个图,应该知道如何使用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。

Hive MapJoin

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

MapReduce Local Task

图中红框圈出了执行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编译原理

    总结来说,HiveSQL编译原理是Hive处理SQL查询的核心机制,它包括词法分析、语法分析、逻辑规划、优化、物理规划和执行等多个阶段。理解这一原理对于提升Hive查询性能、优化大数据处理流程具有重要意义。在实际工作中...

    Hive优化以及执行原理

    总的来说,理解Hive的优化策略和执行原理对于提升查询性能至关重要。通过对SQL语句的精心设计和对集群配置的适当调整,可以有效地处理大规模数据查询。同时,随着Hive与其他计算框架如Spark的融合,其执行效率和灵活...

    Hive原理与实现

    - **操作符**:Hive执行的基本单位,每个操作符对应一个特定的功能,例如TableScanOperator负责从表中读取数据,JoinOperator负责连接两个数据集。 - **执行计划**:操作符按照一定的顺序组合而成的计划,描述了Hive...

    HiveSQL解析原理.docx

    在Hive中,实现两个表的Join操作通常涉及到以下步骤: - 在Map阶段,为来自不同表的数据打上标记(tag),这些标记会被添加到Map输出的Value中。 - 在Reduce阶段,根据标记来判断数据来源并进行相应的Join操作。 ...

    hive实现原理

    2. **解决性能瓶颈**:理解 Hive 的内部机制有助于诊断和解决性能问题。 3. **SQL优化技巧**:熟悉 Hive 的执行流程可以帮助编写更高效的 SQL 语句,如合理使用索引、优化 Join 语句等。 4. **定制需求**:针对特定...

    Hive SQL 编译过程详解

    - **Join的实现原理**:在Hive中,Join操作通常通过MapReduce来实现。例如,在一个内连接中,Map阶段将不同表的数据分别标记,然后在Reduce阶段,依据标记判断并合并来自不同表的记录。这种方法确保了JOIN操作的...

    hive官方翻译文档

    例如,可以使用`SELECT`语句从Hive表中提取数据,`JOIN`操作用于合并多个表的数据,`GROUP BY`和`HAVING`用于数据分组和过滤。 3. **元数据**:Hive MetaStore存储了关于Hive表的所有元数据,如表名、列名、分区...

    《Hive数据仓库案例教程》教学大纲.pdf

    学习者需要掌握不同数据类型的操作,理解Hive的数据存储机制,如TextFile、SequenceFile、Orc和Parquet等。 4. **Hive数据定义**:讲解如何创建、查询、修改和删除数据库及表,包括分区表和桶表的创建。学生将学会...

    hive实现原理--------from淘宝.pdf

    总的来说,学习 Hive 的实现原理有助于我们更好地理解大数据处理背后的机制,从而更好地利用 Hive 进行数据分析和管理,尤其是在面对淘宝这样的大型电商平台海量数据时,有效运用 Hive 可以极大地提升数据处理效率。

    hive官方文档整理

    通过阅读和理解这份官方文档,你将能够掌握Hive的基本操作,理解其工作原理,并学会如何在实际项目中有效地应用Hive进行大数据分析。同时,Hive的使用需要结合Hadoop的生态系统,例如HDFS的数据存储和YARN的任务调度...

    hive1.2.2源代码

    在本文中,我们将深入探讨Hive 1.2.2的源代码,解析其核心组件和工作原理,以便更好地理解和优化使用。 一、Hive架构与组件 Hive的核心架构由多个组件构成,包括Hive Metastore、Hive Server、HQL解析器、编译器、...

    apache-hive-1.2.1源码包(已编译)(含Hive的使用全解)

    在"apache-hive-1.2.1源码包"中,我们可以深入理解Hive的内部工作原理以及其如何与Hadoop生态系统协同工作。 1. **Hive架构** Hive的核心组件包括Metastore、Driver、Compiler、Executor和HMS(Hive Metastore ...

    大数据系列-Hive

    3. **Hive与Spark集成**:Spark作为更快的计算框架,与Hive集成后,能提升查询效率,尤其是在复杂的Join和Group By操作中。 4. **Hive的ACID特性**:从Hive 3.0版本开始,Hive支持事务(transaction)、原子性...

    hive-0.8.1.tar.gz.zip下载

    Hive是Apache软件基金会开发的一个数据仓库工具,它允许用户使用SQL-like...尽管它可能没有最新版本的功能丰富,但对于学习和理解Hive的基本原理和操作,以及大数据处理的基础概念,Hive-0.8.1仍具有重要的参考价值。

    hive调优策略

    大小表Join原理 - **概念**:在Hive中执行Join操作时,如果其中一个表的数据量远小于另一个表,则可以使用“小表”进行广播(Broadcast Join),以减少数据传输成本。 - **优点**:显著降低Shuffle阶段的数据传输量...

    《企业级Hive实战课程》大纲

    随着大数据技术的发展,Hive作为Hadoop生态系统中的一个重要组成部分,对于企业的数据分析和处理起着核心作用。Facebook、淘宝等大型互联网公司均采用Hive进行大规模的数据分析,尤其是在离线统计领域,Hive的应用...

    apache-hive-2.1.1-src

    在"apache-hive-2.1.1-src"这个压缩包中,包含了Hive 2.1.1版本的源代码,这对于开发者和数据分析师来说是一个宝贵的资源,可以深入了解Hive的工作原理,并对其进行定制或扩展。 1. **Hive架构**:Hive的核心架构...

    hive实用-hadoop数据仓库指南【英文about云】1

    1. **Hadoop 环境**:首先,书中可能会介绍 Hadoop 生态系统的基础知识,包括 MapReduce、HDFS 和 YARN,这些都是理解 Hive 工作原理的前提。 2. **Hive 架构**:详细阐述 Hive 的组件,如元数据存储(通常使用 ...

    Hive编程指南

    Hive的设计目标是提供一种简单的数据提取、转化和加载(ETL)机制,并支持大规模数据分析。 1. **Hive架构** Hive的核心架构包括客户端、元数据存储、驱动器、编译器、执行器等组件。客户端是用户与Hive交互的接口...

    大数据技术之hive学习文档

    Hive 存储数据时,默认使用 HDFS,其执行引擎主要是 MapReduce,尽管后来版本中也支持 Tez 和 Spark。 **1.2 Hive 的优缺点** 1.2.1 优点 - 用户友好的 SQL 接口:Hive 使用类 SQL 语法,便于开发和理解。 - 减少...

Global site tag (gtag.js) - Google Analytics