Hive Sort Merge Bucket Map Join(大表关联)

Hive中的Sort Merge Bucket Join 最近学习时发现 Hive 中还有一种 SMB Join,即 Sort Merge Bucket Join ,赶紧找资料学习了一波。。 map join 我们知道在 Hive 中当小表 join 大表时可以通过 map join 将小表中的数据读入内存,在 map 端 join 大表,从而省略 reduce 过程,大大加快连接的速度,但是当小表数据量过大内存放不下时就无法使用 map join 了,由此引出了 Sort Merge Bucket Join。 SMB join 要使用 SMB Join,所有的表 阅读详情

Hive 桶

对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是 针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。
把表(或者分区)组织成桶(Bucket)有两个理由:

(1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。

(2)使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。

测试:一个4000万和一个5000多万的表Join,关联键数据倾斜,并且笛卡尔积,效果明显。

建立小表
create table lxw_test1(id int,name string,date_time string)  
clustered by(id) sorted by(id) into 10 buckets;  
建立大表
create table lxw_test2(id int,name string,date_time string)  
clustered by(id) sorted by(id) into 5 buckets;  

ps:
1.两个表关联键为id,需要按id分桶并且做排序,小表的分桶数是大表分桶数的倍数。
2.对于map端连接的情况,两个表以相同方式划分桶。处理左边表内某个桶的 mapper知道右边表内相匹配的行在对应的桶内。因此,mapper只需要获取那个桶 (这只是右边表内存储数据的一小部分)即可进行连接。这一优化方法并不一定要求 两个表必须桶的个数相同,两个表的桶个数是倍数关系也可以
3.桶中的数据可以根据一个或多个列另外进行排序。由于这样对每个桶的连接变成了高效的归并排序(merge-sort), 因此可以进一步提升map端连接的效率

启用桶表
set hive.enforce.bucketing = true;  
往小表中插入4000万条记录
  insert overwrite table lxw_test1  
  select id,name,null    
  from woa_all_user_info_his   
  where pt = '2012-05-28'  
  limit 40000000;  
往大表中插5000多万条记录(woa_all_user_info_his中有5000多万条记录)
 insert overwrite table lxw_test2  
 select id,name,date_time  
 from woa_all_user_info_his  
 where pt = '2012-05-28';  
设置Sort Merge Bucket Map Join的参数
set hive.optimize.bucketmapjoin = true;  
set hive.optimize.bucketmapjoin.sortedmerge = true;  
set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;  
ps:此时的状况是Bucket columns==Join Columns==Sort Columns,完全具备具备使用Sort Merge Bucket Map Join的条件。
查询
select /*+ mapjoin(b) */ count(1)  
from lxw_test1 a   
join lxw_test2 b  
on a.id = b.id   
测试结果:

包括insert数据,采用Sort Merge Bucket Map Join的方式耗时10分钟左右。

如果这两个表做普通的join,耗时1个多小时,还跑不完,最后只得Kill掉了!

Hive----关联查询 排序 系统函数 分桶表 行列转换 窗口函数 关联查询 join on --可以多表连接 left join on --左连接 right join on --右连接 left semi on --返回主表的内容 right不能和semi一块使用,只能左连 (类似于子查询) union all --联合查询,连接两个查询的结果集 要求字段个数和数据类型一致 all(不会去重) union --去重 (union all 和 union返回结果是两个表的结合) full join --两个表的拼接(包括null值) --join的多表连 阅读详情

相关推荐

【大数据入门 | Hive】HQL语法优化之Join优化

Hive拥有多种join算法,包括Common Join,Map Join,Bucket Map Join,Sort Merge Buckt Map Join等,下面对每种join算法做简要说明:Common Join是Hive中最稳定的join算法,其通过一个MapReduce Job完成一个join操作。Map端负责读取join操作所需表的数据,并按照关联字段进行分区,通过Shuffle,将其发送到Reduce端,相同key的数据在Reduce端完成最终的Join操作。如下图所示:需要注意的是,sql语

2301_80912559的博客 1691

Hive场景问题+Hive排序+Hive中的join+Hive参数优化

目录 一、一个实际场景,组合多的问题 1、场景描述 2、如何优化? 二、Hive中的排序 1、order by (全局排序) 2、sort by (分区内排序) 3、distribute by (分区排序) 4、cluster by (简写) 5、一个关于排序的实际场景例子 (1)问题描述 (2)解决方法 三、hive中的join 1、普通的join(left,inner等)(common/shuffle/reduce join) 2、map join大小表...

qq_43476430的博客 1524

通俗易懂的Hive join几种形式原理详解

表的Join是数据分析处理过程中必不可少的操作,Hive同样支持Join的语法,Hive Join的底层还是通过MapReduce来实现的,Hive实现Join时,为了提高MapReduce的性能,提供了多种Join方案来实现,例如适合小表Join大表的Map Join,大表Join大表的Reduce Join,以及大表Join的优化方案Bucket Join等。 1 Map Join 应用场景 适合于小表join大表或者小表Join小表 原理 将小的那份数据给每个MapTask的内存都放一.

石榴姐yyds 4863

HiveSql语法优化四 :Bucket Map Join和Sort Merge Bucket Map Join优化

之前的map join适用场景是大表join小表的情况,但是两张表都相对较大,若采用普通的Map Join算法,则Map端需要较多的内存来缓存数据,当然可以选择为Map段分配更多的内存,来保证任务运行成功。但是,Map端的内存不可能无上限的分配,所以当参与Join的表数据量均过大时,就可以考虑采用Bucket Map Join算法。需要注意的是,Bucket Map Join的执行计划的基本信息和普通的Map Join无异,若想看到差异,可执行如下语句,查看执行计划的详细信息。

zmx_messi的博客 1333

优化 | Hive Join 优化之 Sort Merge Bucket Map Join 实践

Hive中的Sort Merge Bucket Map Join(SMB Map Join)是在Bucket Map Join基础上优化的连接方式,它要求两表在Join Key上预先分桶且排序。相比Bucket Map Join使用Hash Join算法,SMB Map Join采用更高效的Sort Merge Join算法。启用该优化需配置hive.optimize.bucketmapjoin.sortedmerge=true等参数,支持自动转换无需手动提示。通过案例演示,SMB Map Join能有效提

SmartSi 1107

数仓工具—Hive语法之map join、reduce join、smb join(8)

1. map join 对性能优化有特别明显的效果,而且有很多的适用场景,例如大小表关联、不等值连接、处理数据倾斜 2. 关于SMB join主要用来处理大表关联,hive并不检查两个join的表是否已经做好bucket且sorted,需要用户自己去保证join的表,否则可能数据不正确 3. Reduce-side(Common) Join 是我们最常见的join 类型,通过shuffle 来完成数据的分发

6万+

Hive、Spark 的 join 方式

Hive和Spark提供了多种Join算法实现方式。Hive支持Common Join、Map Join、Bucket Map Join和Sort Merge Bucket Map Join等算法,适用于不同规模表之间的关联操作,其中Map Join适用于小表与大表关联,Bucket Map Join则适用于大表间关联。Spark提供Broadcast Hash Join、Sort Merge Join、Shuffle Hash Join等算法,Broadcast Join无需Shuffle,适合小表广播场

lydms的博客 1240

数仓工具—Hive进阶之各种join 的执行计划(16)

Hive join 的执行计划 今天我们接着学习hive 的执行计划,我们知道join 是我们在hive 中非常常见的一种操作,而且掌握它也是hive 性能调优的一个重要环节,今天我们来看一下hive 各种join 的执行计划。 关于执行计划可以参考前面的文章:Hive进阶之执行计划 Shuffle Join(Common Join) Shuffle Join 是一个Join的一个默认选项,它包含map stage 和 reduce stage Mapper: 读取表数据并且输出关联的 key-value

5万+

【Hive】Hive Join 介绍

文章目录一、Join二、Join 类型2.1、INNER JOIN 内连接2.2、LEFT OUTER JOIN 左外连接2.3、RIGHT OUTER JOIN 右外连接2.4、FULL OUTER JOIN 全外连接2.5、LEFT SEMI JOIN 左半开连接2.6、JOIN笛卡尔积三、Join 的实现原理3.1、Common Join3.2、Map Join四、Join 优化4.1、BU...

w1992wishes的博客 1347

Camera AF和FF

Camera按对焦功能可以分为FF(Fixed Focus)和AF(Auto Focus),即固定对焦和自动对焦。固定对焦顾名思义就是焦距是固定的,而自动对焦可以通过移动镜头位置来改变焦距从而实现自动对焦。以前摄像的功能机大多是固定对焦,现在的手机都带有自动对焦功能。 FF模组包括镜头(Lens),传感器(Sensor),红外滤色器(IR Filter),电路板(PCB),镜头支撑(Lens Holder),连接器(Connector)。 Fig 1. FF Module AF模组包括FF模组,音圈马达(V

Coppa的博客 1万+

STC15单片机实战项目软件开发第四讲 - 按键检测(状态机)

软件开发第四讲 - 按键检测(状态机) 一、工具链接 1、Keil c51 UV4 https://yunpan.360.cn/surl_yrIfYYmeRFk 2、STC-ISP下载软件 https://yunpan.360.cn/surl_yxH4CuUUvI3 二、学习板获取方式 方法1:自己设计PCB,自行打板焊接; 方法2:用群主设计的PCB,自行打板焊接; 方法3:向群主购买,淘宝链接...

硬件家园 3046

hive多个表join_Hive的三种Join方式

Hive的三种Join方式hiveCommon/Shuffle/Reduce JoinReduce Join在Hive中也叫Common Join或Shuffle Join如果两边数据量都很大,它会进行把相同key的value合在一起,正好符合我们在sql中的join,然后再去组合,如图所示。Map Join1) 大小表连接:如果一张表的数据很大,另外一张表很少(<1000行),那么我们可以...

weixin_39574708的博客 2480

示波器核心参数选型指南:带宽、采样率与嵌入式调试实战

示波器是电子工程师进行信号观测与故障诊断的基础仪器,其性能由带宽、采样率、通道数、存储深度、触发系统和探头特性共同决定。带宽定义高频响应边界,需遵循5倍法则以保障数字信号上升沿测量精度;采样率则依据奈奎斯特定理并结合工程冗余(通常≥2.5×带宽)实现可靠时域重建。二者协同影响信号完整性评估能力,尤其在UART、I²C、SPI等嵌入式总线调试中至关重要。高存储深度支持长时捕获与毛刺定位,智能触发与硬件协议解码进一步将波形分析升维至语义级。本文围绕真实嵌入式场景,解析参数间的耦合关系与典型误用陷阱。

weixin_42588877的博客 91

Hive JOIN底层MapReduce实现解析

Join 类型原理适用场景优点缺点通过 Shuffle 确保相同Key到同一Reducer通用场景最通用性能差,Shuffle开销大Map Join小表装入内存,Map端直接关联一大一小表关联速度极快,无Shuffle小表必须足够小SMB Join利用预先的分桶和排序,极大优化Shuffle和Reduce过程两大表关联解决大数据量Join的性能问题需要预先分桶排序,灵活性差Skew Join将热点Key分散处理数据存在严重倾斜的Common Join避免数据倾斜导致的长尾问题。

走过冬季 790

卸载python弹框报错:Could not set file security for file ‘D:\Config.Msi\abd5.rbf‘. Error: 5. Verify...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 6487

应用商店评论分析实战:Python逆向工程破解Google Play加密接口与NLP建模

在移动互联网时代,应用商店中的用户评论成为了开发者优化应用、提升用户体验的重要依据。然而,Google Play等应用商店对评论数据进行了加密处理,直接爬取难度较大。本文将介绍如何使用Python逆向工程破解Google Play的加密接口,实现对应用商店评论的实时采集,并结合NLP(自然语言处理)技术进行情感分析和主题建模,为开发者提供有价值的数据支持。

u014481728的博客 1348

hive join优化和数据倾斜处理

使用Hive Join语句时,如果数据量大,可能造成SQL执行速度和查询速度慢,可以进行join优化,Join优化可分为Map Join、Bucket Map Join、Sort Merge Bucket MapJoin、Join 顺序优化。

weixin_62206215的博客 1039

MZI and MI Optical Waveguide(马赫曾德与迈克尔逊光波导)

注意,这里的 “镜子” 并不是真的在波导中做一个镜子出来,而是通过使用一个 1x2 的 MMI 结构将 MMI 输出的两个端口连接起来形成一个 “宽带镜子”。对于这里形成镜子的详细原理,后面有时间了我们再做更加详细地介绍。,它由一个 splitter 构成和两个仿佛带有 “镜子” 的臂组成。相比较于 MZI,光波可以在它的臂中传输,最终从进光口处出去得到相长或者相消干涉,很明显,在。)的折射率,从而使得两个臂上产生的相位差值不同,最终得到相长或者相消干涉的结果。这里,给大家介绍一下。,它更像是一个折叠的。

u011699626的博客 2454

Hive的三种Join方式

Hive中就是把Map,Reduce的Join拿过来,通过SQL来表示。 参考链接:link 一、Common/Shuffle/Reduce Join Reduce Join在Hive中也叫Common Join或Shuffle Join 如果两边数据量都很大,它会进行把相同key的value合在一起,正好符合我们在sql中的join,然后再去组合,如图所示。 二、Map Join 1) 大小表连接: 如果一张表的数据很大,另外一张表很少(<1000行),那么我们可以将数据量少的那张表放到内存里面,

雾岛与鲸的博客 1838

YOLOv12改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是基于StarNet的YOLOv12轻量化改进方法研究。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 1215

【专栏必读】王道考研408计算机网络+湖科大教书匠计算机网络+网络编程万字笔记使用说明及章节导航

本文档汇总了王道考研408计算机网络和湖科大教书匠计算机网络课程的重点内容,包括计算机网络体系结构、物理层、数据链路层、网络层、传输层和应用层的详细讲解。通过ISO/OSI和TCP/IP模型,深入探讨了通信基础、介质访问控制、IP地址、TCP/UDP协议、流量控制和网络编程等关键概念。此外,还提供了Linux网络编程实践,帮助读者巩固理论知识

快乐江湖的博客 2万+

Hive中join有三种

Hive中join有三种 1、commonjoin 也称为shuffleJoin 走的是shuffle端的join,适合大表join大表,key的value值如果相等就进行join 2、mapjoin 大小表连接:如果一张表的数据很大,另外一张表很小(<1000行),将数据量小的表放在内存中,在map端做join。(join on) 需要做不等值join操作(a.x<b.y或者a.x like b.y等)hvie中不支持不等值join操作,如果吧不等值写到where里会造成笛卡尔积,数据

qq_43528451的博客 818

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Hive查询性能优化之高级JOIN策略解析

• 参数调优:根据实际数据量和业务需求,调整Hive的JOIN相关参数,如hive.mapjoin.smalltable.filesize(控制Map - Side JOIN中小表的大小阈值)、hive.exec.reducers.bytes.per.reducer(控制每个Reducer处理的数据量)等。• 性能提升:相比普通Map - Side JOIN,在处理大规模桶表数据时,Bucket Map - Side JOIN能更精准地定位匹配数据,进一步减少不必要的计算和数据传输,显著提升查询效率。

erliu1995的博客 722

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Hive分桶表原理与实战:从大表Join优化到SMB Join

在数据仓库和大数据计算中,大表关联(Join)性能问题一直是工程师的痛点。Hive分桶表通过哈希取模将数据均匀打散为多个文件,可有效减少Shuffle数据量和Reduce负载。理解分桶原理、建表DDL、桶内排序、Bucket Map Join与Sort Merge Bucket Join的执行逻辑,是优化百亿级数据关联的关键。本文从分桶概念讲起,结合生产环境参数配置、数据倾斜与常见故障排查,帮助数据工程师掌握用分桶表重构数据布局,从而显著提升Hive和Spark SQL等场景下的查询性能。合理运用分桶表,不

weixin_42619061的博客 191

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Hive Sort Merge Bucket Map Join

测试:一个4000万和一个5000多万的表Join,关联键数据倾斜,并且笛卡尔积,效果明显。 #建立小表 create table lxw_test1(id int,name string,date_time string) clustered by(id) sorted by(id) into 10 buckets; #建立大表 create table lxw_test2(id

lavimer 2677
上一篇: 二叉树的镜像
下一篇: Storm 可靠的与不可靠的消息
yjgithub
博客等级 码龄11年 53粉丝 105原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值