首页 > 其他分享 >Hive-mapjoin详解(mapjoin原理)

Hive-mapjoin详解(mapjoin原理)

时间:2023-12-22 15:57:54浏览次数:37  
标签:Map join MapJoin Hive mapjoin 详解 key Join

笼统的说,Hive中的Join可分为Common Join(Reduce阶段完成join)和Map Join(Map阶段完成join)。本文简单介绍一下两种join的原理和机制。

一 .Common Join

如果不指定MapJoin或者不符合MapJoin的条件,那么Hive解析器会将Join操作转换成Common Join,即在Reduce阶段完成join。
Common 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);

二. Map Join

MapJoin就是在Map阶段进行表之间的连接,map阶段直接拿另外一个表的数据和内存中表数据做匹配。而不需要进入到Reduce阶段才进行连接,可以避免传统的排序和归并操作,这样就节省了在Shuffle阶段时要进行的大量数据传输,从而起到了优化作业的作用。

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.

假设a表为一张大表,b为小表,并且hive.auto.convert.join=true,那么Hive在执行时候会自动转化为MapJoin。

执行流程如下:

1.通过MapReduce Local Task,将小表读入内存,生成HashTableFiles上传至Distributed Cache中,这里会对HashTableFiles进行压缩。

2.MapReduce Job在Map阶段,每个Mapper从Distributed Cache读取HashTableFiles到内存中,顺序扫描大表,在Map阶段直接进行Join,将数据传递给下一个MapReduce任务。

 commen join 时map段会有sort order 排序的功能,但是在mapioin 时map 段不会sort。

 

三. 总结

  1. mapioin 可以看做 boardcast join 就是将小表的数据加载到内存中并且没有shuffle过程,加快处理效率,但是这样如果数据量过大,加载到内存有可能会引起OOM。
  2. 普通join 会产生shuffle,会影响效率(数据传输),也能产生数据倾斜 (一个key太多,那任务处理就会很慢)。

标签:Map,join,MapJoin,Hive,mapjoin,详解,key,Join
From: https://www.cnblogs.com/yeyuzhuanjia/p/17921752.html

相关文章

  • k8s组件、工作原理详解
    1.k8s组件  Master组件:kube-apiserver(APIServer):角色:提供集群的唯一入口,处理所有API请求。原理:接收来自客户端(kubectl、UI界面)和其他组件的请求,验证和授权请求,然后将其转发到其他组件或更新etcd中的数据。etcd:角色:分布式键值存储,保存整个集群的状......
  • 详解 MoE
    详解MoE随着Mixtral8x7B的发布(公告,模型卡),MoEtransformer(MixtureofExperts,混合专家)模型已经成为开放AI社区的热门话题。本文,我们主要讨论MoE模型的基础模块、训练方式以及针对推理场景的主要考量。我们开始吧!目录详解MoE目录太长不看版MoE模型到底是什么?MoE......
  • Unity3D iOS 系统与 Unity 交互中如何实现参数传递详解
    在Unity3D开发中,与iOS系统的交互是非常常见的需求。而在交互过程中,参数传递是非常重要的环节。本文将详细介绍在Unity3DiOS系统与Unity交互中如何实现参数传递,并给出技术详解以及代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事......
  • Unity3D 背包系统的渲染如何优化详解
    Unity3D背包系统是游戏中常见的一个功能,玩家可以在游戏中收集或购买各种道具,然后将其放入背包中进行管理。然而,当背包中的道具数量增加时,往往会导致游戏的性能下降,因为需要渲染大量的道具图标和信息。因此,如何优化背包系统的渲染成为了游戏开发中的一个重要问题。对啦!这里有个游......
  • Unity3D 自定义Shader 与 内置Shader 如何整合详解
    Unity3D是一款非常流行的游戏开发引擎,它提供了丰富的内置Shader供开发者使用。然而,有时候我们需要根据具体需求自定义Shader来实现特定的效果。本文将详细介绍Unity3D中如何整合自定义Shader和内置Shader,并给出相关的技术详解和代码实现。对啦!这里有个游戏开发交流小组里面聚集了......
  • Hive和Spark生产集群搭建
    1.环境准备1.1版本选择序号bigdata-001bigdata-002bigdata-003bigdata-004bigdata-005MySQL-8.0.31mysqlDataxDataxDataxDataxDataxDataxSpark-3.3.1SparkSparkSparkSparkSparkHive-3.1.3HiveHive1.2主要组件官网hive官网:htt......
  • OAuth2 认证详解
    摘自网上内容,写的很好。是一种开放标准的授权框架,用于授权第三方应用程序访问受保护的资源,而无需提供直接的用户名和密码。它提供了一种安全的授权机制,允许用户授权第三方应用程序代表他们访问受保护的资源。下面将详细解释OAuth2的认证过程和相关概念。OAuth2认证的主要参与者......
  • 使用ansible脚本用pt-archiver归档数据
    【背景说明】需要使用ansible来管理删除数据任务,数据量较大,使用pt-archiver工具【环境说明】MySQL主从架构+pt-archiver3.5.5【剧本说明】treeroles/archive_mysql/roles/archive_mysql/├──files│└──percona-toolkit-3.5.5-1.el7.x86_64.rpmpt工具├......
  • 7z 命令行压缩解压详解-中文版
    1)简介7z,全称7-Zip,是一款开源软件。是目前公认的压缩比例最大的压缩解压软件。主页:http://www.7-zip.org/中文主页:http://7z.sparanoid.com/命令行版本下载:http://7z.sparanoid.com/download.htmlWindows去官网下载安装包安装linux使用命令安装:sudoaptinstallp7zip-full......
  • 【教程】cocos2dx资源加密混淆方案详解
    ​ 【教程】cocos2dx资源加密混淆方案详解1,加密,采用blowfish或其他2,自定是32个字符的混淆code3,对文件做blowfish加密,入口文件加密前将混淆code按约定格式(自定义的文件头或文件尾部)写入到文件4,遍历资源目录,对每个文件做md5混淆,混淆原始串=“相对路径”+“文件名”+混......