`
superlxw1234
  • 浏览: 550677 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44347
社区版块
存档分类
最新评论

[一起学Hive]之十-Hive中Join的原理和机制

    博客分类:
  • hive
阅读更多

关键词: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);

 

 

Hive Common Join

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

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,就有多少个结果文件。

 

Hive相关文章(持续更新)

一起学Hive系列

—-Hive概述,Hive是什么

—-Hive函数大全-完整版

—-Hive中的数据库(Database)和表(Table)

—-Hive的安装配置

—-Hive的视图和分区

—-Hive的动态分区

—-向Hive表中加载数据

—-使用Hive命令行

—-Hive的查询语句SELECT

Hive分析函数系列

Hive索引

hive优化之——控制hive任务中的map数和reduce数

3
0
分享到:
评论
1 楼 annmi_cai 2016-03-11  
顶顶更健康!

相关推荐

    Hive编程指南-by-_美_Edward-Capriolo Dean-Wampler Jason-Rutherglen-著-_

    《Hive编程指南》是一本深入讲解Hive在Hadoop生态系统中应用的书籍,由Edward Capriolo、Dean Wampler和Jason Rutherglen三位专家共同撰写。书中详细介绍了Hive的基础知识,包括Hadoop和MapReduce的概念,以及Hive在...

    hive

    Hive 是一个基于 Hadoop 的数据仓库工具,它允许用户使用 SQL 类似的查询语言(称为 HiveQL)来处理和分析存储在 Hadoop 分布式文件系统(HDFS)中的大数据集。Hive 提供了一个数据层,使得非编程背景的用户也能方便...

    hive优化总结

    JOIN操作是Hive性能优化的关键之一。在执行JOIN操作时,应该将小表放在前面,以避免内存溢出错误。同时,应该使用MAPJOIN操作,以提高 JOIN 的效率。 4. 列裁剪和分区裁剪 列裁剪和分区裁剪是Hive性能优化的重要...

    Hive高级编程经验分享.pdf

    本篇文章将深入探讨Hive的组件、MapReduce的工作原理以及Hive QL的使用,包括JOIN操作、GROUP BY聚合以及COUNT DISTINCT等高级特性。 首先,我们来看Hive的主要组件。Facebook开发的Hive包含了多个关键部分,如HDFS...

    大数据 虚拟机 Linux VM复习题库:题库包括了60题选择题、10题填空题、10题判断题、2题简答题,助你度过期末复习

    【大数据虚拟机Linux VM复习题库】主要涵盖了大数据处理、Hadoop生态系统中的Hive以及Linux虚拟机相关的知识。以下是对这些知识点的详细说明: 1. **数据仓库与数据库系统的关系**: 数据仓库是一个用于报告和数据...

    实验3MyJoin1

    【实验3 MyJoin1】是关于使用MapReduce和Hive进行大数据处理的实践任务,主要目的是让学生掌握如何在Hadoop环境中实现数据join操作并利用Hive进行数据管理和查询。以下是这个实验涉及的知识点: 1. **MapReduce**:...

    impala单机部署手册

    Impala 是参照谷歌的新三篇论文(Caffeine、Pregel、Dremel)中的 Dremel 实现而来,其中旧三篇论文分别是(BigTable、GFS、MapReduce)分别对应我们即将学的 HBase 和已经学过的 HDFS 以及 MapReduce。 Impala 是...

    Big-Data-Hadoop-Asnt-25:作业25-大数据生态系统集成

    在大数据生态系统中,Hadoop通常与众多其他工具一起使用,如Apache HBase、Spark、Flink、Hive和Pig等。这些工具各有其专长,比如HBase是NoSQL数据库,适用于实时数据查询;Spark则提供了快速的批处理、流处理和机器...

    cdh sql++++++++++++++++++++++++++

    在CDH环境下,SQL通常与Hive和Impala等组件一起使用,这些组件提供了在Hadoop上处理大规模数据的能力。Hive提供了类似SQL的查询语言HQL(Hive SQL),适合ETL(提取、转换、加载)任务。Impala则提供了实时查询能力...

    蜂巢数据负载分区存储

    通过这个项目,你可以学习如何设计高效的Hive表结构,理解数据分区和桶化的原理,以及如何通过实际操作来提升大数据查询性能。此外,还可以了解到如何分析和评估不同分区策略对系统性能的影响,这对于大数据工程师来...

    MapReduce入门程序

    MapReduce是Google提出的一种分布式计算模型,被广泛应用于大数据处理领域,尤其是在Apache Hadoop框架中。...此外,还可以进一步了解Hadoop的生态环境,如Hive、Pig、Spark等工具,它们在大数据处理中各有特色和用途。

    apache_drill_tutorial.pdf

    此外,教程还会介绍如何利用Drill与大数据技术(如HDFS和HBase)一起处理数据,并展示一些实际的应用场景。 Apache Drill的核心特性包括: 1. **无模式查询**:Drill支持对未定义模式的数据进行查询,这意味着你...

    spark的源码包.zip

    7. **Spark Shuffle**:Shuffle是Spark中数据重新分布的过程,通常发生在join、reduceByKey等操作中。它涉及分区调整,可能导致网络传输和磁盘I/O,是影响性能的关键环节。 8. **Memory Management**:Spark利用...

    大飞深度SQL,为大家提供点方便

    在IT行业中,SQL(Structured Query Language)是一种用于管理和处理关系数据库的强大工具。"大飞深度SQL,为大家提供点方便"这个主题,暗示我们将探讨如何利用SQL进行高效的数据操作,优化查询,以及解决实际问题。...

Global site tag (gtag.js) - Google Analytics