hive数据倾斜优化策略

Hive-Group by的优化(解决数据倾斜的问题) Group by 默认情况下,Map 阶段同一 Key 数据分发给一个 reduce,当一个 key 数据过大时就倾斜。 为了解决group by数据倾斜的情况,可以采用Map端数据聚合的操作。 1)开启 Map 端聚合参数设置 (1)是否在 Map 端进行聚合,默认为 True set hive.map.aggr = true (2)在 Map 端进行聚合操作的条目数目 set hive.groupby.mapaggr.checkinterval = 100000 (3)有数据倾斜的时候进行负 阅读详情

hive数据倾斜优化策略

 

Hive数据倾斜

Group By 中的计算均衡优化   

 1.Map端部分聚合     

 先看看下面这条SQL,由于用户的性别只有男和女两个值 (未知)。如果没有map端的部分聚合优化,map直接把groupby_key 当作reduce_key发送给reduce做聚合,就会导致计算不均衡的现象。虽然map有100万个,但是reduce只有两个在做聚合,每个reduce处理100亿条记录。       

selectuser.gender,count(1) from user group by user.gende

没开map端聚合产生的计算不均衡现象

  hive.map.aggr=true参数控制在group by的时候是否map局部聚合,这个参数默认是打开的。参数打开后的计算过程如下图。由于map端已经做了局部聚合,虽然还是只有两个reduce做最后的聚合,但是每个reduce只用处理100万行记录,相对优化前的100亿小了1万

map端聚合打开map聚合开关缺省是打开的,但是不是所有的聚合都需要这个优化。考虑先面的sql,如果groupby_key是用户ID,因为用户ID没有重复的,因此map聚合没有太大意义,并且浪费资源。     

select user..id,count(1) from user group by user.id 

 hive.groupby.mapaggr.checkinterval = 100000

Hive.map.aggr.hash.min.reduction=0.5

 上面这两个参数控制关掉map聚合的策略。Map开始的时候先尝试给前100000 条记录做hash聚合,如果聚合后的记录数/100000>0.5说明这个groupby_key没有什么重复的,再继续做局部聚合没有意义,100000 以后就自动把聚合开关关掉,在map的log中会看到下面的提示:2011-02-23 06:46:11,206 WARN org.apache.hadoop.hive.ql.exec.GroupByOperator: Disable Hash Aggr: #hash table = 99999 #total = 100000 reduction = 0.0 minReduction = 0.52.

 数据倾斜   

通常这种情况都是在有distinct出现的时候,比如下面的sql,由于map需要保存所有的user.id 

,map聚合开关会自动关掉,导致出现计算不均衡的现象,只有2个redcue做聚合,每个reduce处理100亿条记录。

 

 select user.gender,count(distinct user.id 

) from user group by user.gender  

) from user group by user.gender  

hive.groupby.skewindata =true

参数会把上面的sql翻译成两个MR,第一个MR的reduce_key是gender+id。因为id是一个随机散列的值,因此这个MR的reduce计算是很均匀的,reduce完成局部聚合的工作

MR1第二个MR完成最终的聚合,统计男女的distinct id值,数据流如下图所示,每个Map只输出两条记录,因此虽然只有两个redcue计算也没有关系,绝大部分计算量已经在第一个MR完成

MR2 hive.groupby.skewindata 

默认是关闭的,因此如果确定有不均衡的情况,需要手动打开这个开关。当然,并不是所有的有distinct的group by都需要打开这个开关,比如下面的

sql。因为user.id 

select id,count (distinct gender) from user group by user.id 

select gender,count (distinct id) from user group by user.gender

是一个散列的值,因此已经是计算均衡的了,所有的reduce都会均匀计算。只有在groupby_key不散列,而distinct_key散列的情况下才需要打开这个开关,其他的情况map聚合优化就足矣。 

;三.Join 中的计算均衡优化在hive中,join操作一般都是在reduce阶段完成的,写sql的时候要注意把小表放在join的左边,原因是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,将条目少的表放在左边,可以有效减少发生 out of memory 错误的几率。 一个大表和一个配置表的reduce join经常会引起计算不均衡的情况。比如配置表gender_config(gender string,gender_id int)。把“男”“女”字符串映射成一个id。配置表和上面的user表join的sql如下: select user.id 

 gender_config.gender_id from gender_config join user on gender_config.gender=user.gender gender 只有男女两个值,hive处理join的时候把join_key作为reduce_key,因此会出现和group by类似的reduce计算不均衡现象,只有两个reduce参与计算,每个reduce计算100亿条记录。

一个大表和一个小配置表的reduce join流程图 这种大表和配置表通常采用mapjoin的方式来解决这种不均衡的现象。目前hive是采用/*+ MAPJOIN(gender_config) */提示的方式告诉翻译器把sql翻译成mapjoin,提示里必须指明配置表是哪个。 select /*+ MAPJOIN(gender_config) */ user.id 

 gender_config.gender_id from gender_config join user on gender_config.gender=user.gender

一个大表和一个小配置表的map join流程图 每个map会把小表读到hash table,然后和大表做hash join。因此map join的关键是小表能放入map进程的内存,如果内存放不下会序列化到硬盘,效率会直线下降。 成千上万个map从hdfs读这个小表进自己的内存,使得小表的读操作变成成个join的瓶颈,甚至有些时候有些map读这个小表会失败(因为同时有太多进程读了),最后导致join失败。临时解决办法是增加小表的副本个数。下一步优化可以考虑把小表放入Distributed Cache里,map读本地文件即可。 

 

从数据倾斜到性能飞跃:Hive/MaxCompute SQL优化中的隐藏模式与反直觉策略 本文深入探讨了Hive/MaxCompute SQL性能优化中的隐藏模式与反直觉策略,特别针对数据倾斜问题提出了创新解决方案。通过分析分布式计算的二八定律,结合金融、电商等实际案例,详细介绍了Map阶段优化、Join策略调整、Reduce阶段压力调节等关键技术,帮助开发者实现从数据倾斜到性能飞跃的转变。 阅读详情

相关推荐

Hive中ROW_NUMBER取Top N的数据倾斜的优化方案:基于赛马定理的优化策略

赛马定理是概率论中的一个重要定理,它描述了两组随机变量在某种“比赛”中的胜出概率。具体来说,如果两组随机变量分别来自两个不同的群体,且每个群体内的随机变量具有相同的期望值,那么这两个群体中随机变量胜出的概率是相同的。在大数据处理领域,Hive作为常用的SQL-on-Hadoop工具,广泛用于执行复杂的数据聚合和分析任务。然而,当涉及到使用ROW_NUMBER()函数进行分组排序并提取Top N记录时,数据倾斜问题常常成为性能瓶颈。

石榴姐yyds 763

Hive Group By

默认情况下,Map 阶段同一 Key 数据分发给一个 reduce,当一个 key 数据过大时就倾斜 了。 并不是所有的聚合操作都需要在 Reduce 端完成,很多聚合操作都可以先在 Map 端进行 部分聚合,最后在 Reduce 端得出最终结果。 1)开启 Map 端聚合参数设置 (1)是否在 Map 端进行聚合,默认为 True set hive.map.aggr = true (2)在 Map 端进行聚合操作的条目数目 set hive.groupby.

song_quan_的博客 1191

高频考点:Hive数据倾斜问题总结和优化措施

在Hive中,数据倾斜是一个常见的性能瓶颈问题。它指的是。

大模型大数据攻城狮的专栏 1531

Hive性能调优之Group By

默认情况下,map阶段同一key数据分发给同一reduce,如果单一key过大就很容易造成数据倾斜。(100条数据分组后一组90条,一组10条,这就会数据倾斜) 这样的话,我们就可以预先在map端进行一些聚合操作,减轻reduce端的压力。 常用参数: --是否在 Map 端进行聚合,默认为 True hive.map.aggr = true --在 Map 端进行聚合操作的条目数目 hive.groupby.mapaggr.checkinterval = 100000 --有数据倾斜的时候进行负载均衡(默

寒暄的博客 1398

广工计组f4b 8位12指令微程序CPU设计实验报告(内含可通过代码以及波形图)

实验目的:模型机是计算机的缩细模型,通过它可以理解计算机整机的结构和功能,理解CPU,存储器,中断控制器,接口的结构及实现逻辑和各部件之前的接口关系。本实验是设计一个8位模型计算机。:一条机器指令可以分解成一个微操作序列,这些微操作是计算机最基本的,不可再细分的操作。:在微程序控制的计算机中。将控制部件向执行部件发出的各种控制命令成为微命令,它是构成控制序列的最小单位。微命令和微操作是一一对应的。微命令是微操作的控制信号,微操作微命令的执行过程。2.:微指令是若干微命令的集合。

weixin_63692154的博客 4705

鲸鱼优化算法(WOA)与门控循环单元(GRU)结合的预测模型(WOA-GRU)及其Python和MATLAB实现

Python和MATLAB的实现均突出模型结构和优化过程。2. **全局搜索与局部搜索结合**:WOA在寻优时,既有全局搜索的能力,又具备局部精准搜索的能力,能有效避免陷入局部最优解。2. **简化结构**:与长短期记忆(LSTM)相比,GRU的结构更为简化,避免了多层细胞结构,提高了计算效率。4. **使用WOA进行优化**:通过WOA迭代优化GRU模型中的参数,如学习率、批量大小和GRU单元的权重。3. **良好的表现**:GRU在多个时序数据序列的预测任务中表现优异,特别是在较短的数据序列中。

qq_45441438的博客 1326

hive--hive runtime error while processing row

文章目录报错解决 报错 hive runtime error while processing row 。。。 org.apache.hadoop.mapred.TaskAttemptListenerImpl: Diagnostics report from attempt_1625031122720_5833339_m_000146_0: Error: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveExceptio

qq_46893497的博客 6245

Kettle 连接 Oracle 数据库全流程指南

例如:C:\Oracle\product\19.0.0\dbhome_1\jdbc\lib\ojdbc8.jar 2. 替换 Kettle 驱动文件 将驱动文件复制到 Kettle 的 目录: 删除旧版本驱动:如 ojdbc14.jar 只能保留一个oracle驱动 重启 Kettle 以加载新驱动 二、配置数据库连接 1. 启动 Kettle 并新建转换 运行 (Windows)或 (Linux)。 新建转换(Transformation),添加 “表输入” 步骤,双击进入配置。 2.

qq_44724453的博客 3484

python金融大数据分析豆瓣-Python金融大数据分析-PCA分析

作者:钱塘小甲子来源:http://blog.youkuaiyun.com/qtlyx/article/details/536471591.pandas的一个技巧apply() 和applymap()是DataFrame数据类型的函数,map()是Series数据类型的函数。apply()的操作对象DataFrame的一列或者一行数据, applymap()是element-wise的,作用于每个DataFr...

weixin_39993454的博客 324

Ubuntu升级遇到grub-efi-amd64-signed报错?3步搞定这个烦人的EFI目录问题

本文详细解析了Ubuntu系统升级时遇到的“grub-efi-amd64-signed”报错及“cannot find EFI directory”问题。通过剖析UEFI启动机制与EFI系统分区原理,提供了从诊断到修复的三步解决方案,帮助用户快速解决因EFI目录未挂载导致的升级中断,确保系统引导正常。

assembly8low的博客 585

告别ZotFile!Zotero 7+百度网盘文献同步全攻略(含软链接避坑指南)

本文针对Zotero 7用户,提供了告别ZotFile插件后,利用百度网盘实现文献附件同步的完整解决方案。详细讲解了如何通过设置Zotero链接目录与创建软链接,将附件库迁移至云盘,并附有详细的避坑指南,确保数据安全与多设备同步的稳定性。

mmm90的博客 589

【Hive】hive 数据倾斜、优化策略、hive执行过程、垃圾回收

文章目录

人生所向,皆是美好 1323

【2025年五一数学建模竞赛】A题 完整论文 模型建立与求解

2025年五一数学建模竞赛 A题:基于历史数据与模式识别的道路车流量推测模型研究

Magnolia_He的博客 3783

hive的数据倾斜以及优化策略

1. hive的数据倾斜  介绍:只要在分布式一定有shuffle,避免不了出现数据倾斜,在混淆数据的过程中出现数据分布不均匀。比如:在MR编程中reducetask阶中的数据的大小不一致,即很多的数据集中到了一个reducetask中,hive的数据倾斜就是mapreduce的数据倾斜 maptask reducetask最后就是reducetask阶段的数据倾斜。  不会产生数据倾斜的场景...

weixin_34326558的博客 268

npm install 时出现npm error code ENOTFOUND和npm error network request to https://registry.npmjs.org的解决方案

本文主要介绍了npm install 时出现npm error code ENOTFOUND和npm error network request to https://registry.npmjs.org 的解决方案,希望能对使用npm的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 6万+

学Simulink——基于Simulink的输入-输出线性化精确转矩控制

本文详细介绍了基于Simulink的永磁同步电机(PMSM)输入-输出线性化(IOL)精确转矩控制方法。针对传统解耦控制在非线性转矩特性下的局限性,提出通过精确反馈线性化实现转矩指令与实际转矩的严格线性关系。文章系统阐述了IOL原理、PMSM控制器推导过程,并提供了完整的Simulink建模步骤,包括电机模型搭建、IOL控制器实现和闭环系统构建。通过仿真对比验证了IOL方法在转矩跟踪精度、动态响应和参数鲁棒性方面的显著优势,最后讨论了工程实现要点和扩展应用方向。该方法为高性能伺服系统开发提供了有效解决方案。

amy_mhd的博客 61

Hadoop-Hive的数据倾斜以及优化策略

1. hive的数据倾斜 介绍:只要在分布式一定有shuffle,避免不了出现数据倾斜,在混淆数据的过程中出现数据分布不均匀。比如:在MR编程中reducetask阶中的数据的大小不一致,即很多的数据集中到了一个reducetask中,hive的数据倾斜就是mapreduce的数据倾斜 maptask reducetask最后就是reducetask阶段的数据倾斜。   不会产生数据倾斜的场景: ...

qichangjian的博客 472

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大表与大表join数据倾斜_hive的数据倾斜以及优化策略

1. hive的数据倾斜介绍:只要在分布式一定有shuffle,避免不了出现数据倾斜,在混淆数据的过程中出现数据分布不均匀。比如:在MR编程中reducetask阶中的数据的大小不一致,即很多的数据集中到了一个reducetask中,hive的数据倾斜就是mapreduce的数据倾斜 maptask reducetask最后就是reducetask阶段的数据倾斜。不会产生数据倾斜的场景:- 不...

weixin_39964590的博客 987

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Hive的数据倾斜以及优化策略

一、hive的数据倾斜 介绍:只要在分布式一定有shuffle,避免不了出现数据倾斜,在混淆数据的过程中出现数据分布不均匀。比如:在MR编程中reducetask阶中的数据的大小不一致,即很多的数据集中到了一个reducetask中,hive的数据倾斜就是mapreduce的数据倾斜 maptask reducetask最后就是reducetask阶段的数据倾斜。不会产生数据倾斜的场景:   ...

qq_41359684的博客 532

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

hive 数据倾斜、优化策略、hive执行过程、垃圾回收

文章目录 1. 数据倾斜 1.1 什么是数据倾斜? 1.2 容易数据倾斜情况 1.3 产生数据倾斜的原因 1.4 不会产生数据倾斜的情况 1.5 业务场景 1.5.1 空值产生的数据倾斜 1.5.2 不同数据类型关联产生数据倾斜 1.5.1 大小表关联查询产生数据倾斜 2. hive执行过程实例分析 2.1 Hive 操作符列表 2.2 Hive 编译器的工作职责 2.3 优化器类型 2.4 hive查看执行过程 ...

大JAVA解决方案 599

Hive 数据倾斜 和常用优化策略

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33722405的博客 183

Hive解决数据倾斜的各种优化方法

一、概念 数据处理中的数据倾斜:个人理解,在数据处理的MapReduce程序中,由于数据的特殊性,数据中存在大量相同key的数据,根据业务需求需要对这个key进行分区操作(group by/join)时,在map的partition阶段将大数据量的相同key的数据全部分配到同一个Reduce,导致Reduce的节点数据量分配极度不均衡的现象,称为数据倾斜。 数据倾斜有哪些表现: 最直观的表现就是:Hive SQL运行得慢 任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量.

TRX的博客 7545

Hive 数据倾斜根治方案:原因分析与针对性优化策略

$ \text{优化后倾斜度} = \frac{\max(\text{Reduce耗时})}{\text{平均耗时}} < 1.5 $$:对持续热点Key(如默认值),建议在数据接入层通过ETL进行数据均匀化处理,从源头解决倾斜问题。

2501_93892898的博客 488
上一篇: Flink状态管理和容错机制介绍
下一篇: hive 数据倾斜、优化策略、hive执行过程、垃圾回收
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值