关键词:Hive MapJoin、Hive Common Join、Hive Reduce Join、Hive Join
九、Hive中Join的原理和机制
笼统的说,Hive中的Join可分为Common Join(Reduce阶段完成join)和Map Join(Map阶段完成join)。本文简单介绍一下两种join的原理和机制。
9.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操作了吧。
9.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,就有多少个结果文件。
相关推荐
《Hive编程指南》是一本深入讲解Hive在Hadoop生态系统中应用的书籍,由Edward Capriolo、Dean Wampler和Jason Rutherglen三位专家共同撰写。书中详细介绍了Hive的基础知识,包括Hadoop和MapReduce的概念,以及Hive在...
Hive 是一个基于 Hadoop 的数据仓库工具,它允许用户使用 SQL 类似的查询语言(称为 HiveQL)来处理和分析存储在 Hadoop 分布式文件系统(HDFS)中的大数据集。Hive 提供了一个数据层,使得非编程背景的用户也能方便...
JOIN操作是Hive性能优化的关键之一。在执行JOIN操作时,应该将小表放在前面,以避免内存溢出错误。同时,应该使用MAPJOIN操作,以提高 JOIN 的效率。 4. 列裁剪和分区裁剪 列裁剪和分区裁剪是Hive性能优化的重要...
本篇文章将深入探讨Hive的组件、MapReduce的工作原理以及Hive QL的使用,包括JOIN操作、GROUP BY聚合以及COUNT DISTINCT等高级特性。 首先,我们来看Hive的主要组件。Facebook开发的Hive包含了多个关键部分,如HDFS...
【大数据虚拟机Linux VM复习题库】主要涵盖了大数据处理、Hadoop生态系统中的Hive以及Linux虚拟机相关的知识。以下是对这些知识点的详细说明: 1. **数据仓库与数据库系统的关系**: 数据仓库是一个用于报告和数据...
【实验3 MyJoin1】是关于使用MapReduce和Hive进行大数据处理的实践任务,主要目的是让学生掌握如何在Hadoop环境中实现数据join操作并利用Hive进行数据管理和查询。以下是这个实验涉及的知识点: 1. **MapReduce**:...
Impala 是参照谷歌的新三篇论文(Caffeine、Pregel、Dremel)中的 Dremel 实现而来,其中旧三篇论文分别是(BigTable、GFS、MapReduce)分别对应我们即将学的 HBase 和已经学过的 HDFS 以及 MapReduce。 Impala 是...
在大数据生态系统中,Hadoop通常与众多其他工具一起使用,如Apache HBase、Spark、Flink、Hive和Pig等。这些工具各有其专长,比如HBase是NoSQL数据库,适用于实时数据查询;Spark则提供了快速的批处理、流处理和机器...
在CDH环境下,SQL通常与Hive和Impala等组件一起使用,这些组件提供了在Hadoop上处理大规模数据的能力。Hive提供了类似SQL的查询语言HQL(Hive SQL),适合ETL(提取、转换、加载)任务。Impala则提供了实时查询能力...
通过这个项目,你可以学习如何设计高效的Hive表结构,理解数据分区和桶化的原理,以及如何通过实际操作来提升大数据查询性能。此外,还可以了解到如何分析和评估不同分区策略对系统性能的影响,这对于大数据工程师来...
MapReduce是Google提出的一种分布式计算模型,被广泛应用于大数据处理领域,尤其是在Apache Hadoop框架中。...此外,还可以进一步了解Hadoop的生态环境,如Hive、Pig、Spark等工具,它们在大数据处理中各有特色和用途。
此外,教程还会介绍如何利用Drill与大数据技术(如HDFS和HBase)一起处理数据,并展示一些实际的应用场景。 Apache Drill的核心特性包括: 1. **无模式查询**:Drill支持对未定义模式的数据进行查询,这意味着你...
7. **Spark Shuffle**:Shuffle是Spark中数据重新分布的过程,通常发生在join、reduceByKey等操作中。它涉及分区调整,可能导致网络传输和磁盘I/O,是影响性能的关键环节。 8. **Memory Management**:Spark利用...
在IT行业中,SQL(Structured Query Language)是一种用于管理和处理关系数据库的强大工具。"大飞深度SQL,为大家提供点方便"这个主题,暗示我们将探讨如何利用SQL进行高效的数据操作,优化查询,以及解决实际问题。...