山大软工实践hive(6)-逻辑优化(2)

HIVE面试别再死记硬背了!从内部表到数据倾斜,我用一个实战项目帮你理清思路 本文通过电商用户行为分析实战项目,深入解析HIVE从数据仓库构建到性能调优的全链路实践。涵盖外部表设计、分区策略、存储格式选择、数据倾斜解决方案等核心面试考点,帮助求职者摆脱八股文死记硬背,掌握大数据面试实战技巧。 阅读详情

2021SC@SDUSC

山大软工实践hive(6)-逻辑优化(2)

以下接着上一次

GroupBy

预聚合

在map端使用combiner预聚合数据以减少shuffle数据量,这对大量数据处理有帮助

数据倾斜处理

为防止大量数据的key相同导致分配任务时的数据倾斜,两阶段聚合数据
原理是启动两个MapReduce任务,第一个任务mapper随机分发给reducer数据,然后reducer做聚合,然后第二MR任务就对预处理过的做聚合
对应的优化器为GroupByOptimizer

关于预聚合能否用于处理数据倾斜

值得注意的是,预聚合用Combiner实现。而关于它:
Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大/小值等。所以预聚合本身就无法随时使用,只有是如sum,count函数时才能运用。
Combiner最基本是实现本地key的归并,Combiner具有类似本地的reduce功能;Combiner的实现一般继承Reducer。
Combiner在Mapper之后Reducer之前运行。

虽然预聚合理论上能够用于处理数据倾斜,但它本身也是继承Reducer的一种实现,所以从概念上讲,数据倾斜处理本身是包含预聚合的

join优化

1.小表做hash表读入内存,可用于map join与Bucket map join(mapjoin会在map阶段完成join操作,不需要reduce)
2.多张表join时key相同,则会合并为一个MR任务,相关性优化器CorrelationOptimizer.

数据倾斜处理

1.Hive将计数超过阈值的倾斜key对应的行临时写进文件中,再启动map join,其它数据用common join,这就是skew join(创建表时指定某属性倾斜key)
2.优化HQL以解决倾斜

  • 对于空值或者无意义的值,可以把它随机变成不可能的值

  • 对于倾斜key可以将它们抽样出来,对应的行单独存入临时表中,key打上前缀如0-9,最后再聚合

  • 不同数据类型之间,如int join string,会让其以int做hash,所有string类型key被分配在一个reducer上(应该是把所有string类型认为是相同key了吧),所以写sql时可以先把数据类型进行转换

  • map join小表太大,对小表做出限制筛选,但要两次map join,比如下面HQL(微改动了下原文语句)

     select /*+mapjoin(b)*/ a.uid
     from log a left outer join 
     (select /*+mapjoin(s)*/ t.uid
     from (select distinct uid from log where pt_date = 20190228) s 
     inner join user_info t on s.uid = t.uid) b on a.uid = b.uid 
     where a.pt_date = 20190228;
    

    大概就是日志表和用户信息表join,获得当天进行某操作的用户数据,一个用户可以用多条log记录,所以先对log表去重地让获取当天的用户id(表s),然后与用户信息表join获取当天操作过的用户信息(表b),最后用log表(表a)与表b join
    这里user_info 就是小表,但它不够小,所以要先筛选一次,总的来说,这种做法,进行了两次map join

MapReduce优化

mapper数

mapper数与文件分割数相关,在org.apache.hadoop.mapreduce.lib.input.FileInputFormat类可以看到相关逻辑
在这里插入图片描述
有参数(简化名字后)tasks, default_num, block_size, input_size, split_num, split_size, min_split, max_split, 以及最终的mapper_num,它们的关系如下

  • default_num=input_num/block_size(文件大小除以块大小,块大小默认值为为64/128MB)
  • split_size=MAX(min_split,MIN(max_split,block_size)),如果block_size在区间最小与最大值之间,则为block_size,否则为最小或最大值(min_split/max_split 默认值为1KB/64MB)。与上面类似,split_num=input_size/split_size
  • mapper_num=MIN(split_num, MAX(default_num, tasks)) 其中tasks为期望值,它只有在数量合适时会采用。可以看见调高max_split更可能会使mapper数减少(原文是调高min_split),调高tasks与max_split更可能增大mapper数(原文还是min_split)

输入:少量大文件则减少mapper数,大量文件则增加,大量小文件需要合并小文件

调整Reducer数

相关tasks参数能直接指定reducer数,而非建议,如果不启用,则按照 reducer_num=MIN(输入大小/reducer默认大小,reducer数的最大值)

JVM复用

MR任务中,默认每启动一个task就启动一个JVM,而如果task多而小,则会浪费开销在JVM启动与关闭。可以通过设定相关参数tasks为n,代表在同一MR任务中顺序执行的n个task可以重用一个JVM

并行与本地与严格执行

并行:如union语句前后可以并行执行
本地:如果任务量小可以直接在节点完成任务,而不提交到集群
严格执行:禁止使用高风险HQL

  1. 查询分区表时不限定分区列的语句
  2. 两表join产生了笛卡尔积的语句
  3. 用order by来排序但没有指定limit的语句(前面有提到order by会导致任务分给一个Reducer,如果不限制数量则很可能负载过大)

看一看源码

对于提到的两个优化器
GroupByOptimizer
在这里插入图片描述
进行group by优化,如果gb key包含bucket,sorting key,则可以直接join(SMBjoin,第4篇提到过,可以猜测此情况会产生SMB算子替代原join->rs->join)

CorrelationOptimizer
在这里插入图片描述
这个优化器的实现参考了一篇论文
让我注意的是,这里的query plan tree似乎与operator tree(DAG)相同,我以后可以认为这是一个东西

我又想到Transform
在这里插入图片描述
所有基于规则的优化都实现了这个接口。所有转换都是按顺序调用的。它们获取当前解析上下文(其中包含操作符树等),执行所有优化,然后返回更新的解析上下文。transform方法被所有继承类继承
这突然让我想到,我不必去找谁在调用了,反正估计Optimizer类initialize方法应该是调用优化器的方法的根,可以从这里把所有的优化器类根据注释与transform方法等把它们的功能罗列一遍,看一看情况

碎语

目前没找到那种对DAG调整的逻辑优化的博客,同时也不知道这些属不属于DAG调整部分,而且这看的源码的很多优化器还没有找到对应的理论。
这写着和转载有什么区别,希望有一个‘’总结‘’分类。走着看吧。。。。

下一篇决定先去翻一翻所有带在Optimizer类initialize方法里带Optimizer结尾的类(不带的视情况而定),应该能确认一些东西

主要参考

hive10种优化
两阶段聚合

【液晶专题】从外挂到In-Cell/ On-Cell/ OGS再也不会傻傻分不清楚了 触控技术经历了从外挂式到内嵌式的革新,主要方案包括外挂式(Out-Cell)、OGS、On-Cell和In-Cell。 阅读详情

相关推荐

【大模型】一图看懂3D因果卷积!

本文将系统性地介绍从1D到3D的因果卷积原理,通过直观的动图演示帮助读者理解其工作机制,并重点探讨3D因果卷积在大规模视频生成中的独特价值和应用前景。

xian0710830114的专栏 2199

Hive--数据倾斜以及解决方案

数据倾斜 一:什么是数据倾斜? ​ 由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点 ,简单来说就是大量相同的key被partition到同一个分区里面导致某些或者某个reducetask压力过大,而一些reducetask闲住。这样也违背了并行计算的初衷。 二:数据倾斜的主要表现? ​ 任务进度长时间维持在 99%或者 100%的附近,查看任务监控页面,发现只有少量 reduce 子任...

ITgagaga的博客 570

Information Fusion投稿避坑指南:从初稿到返修的完整流程解析(附模板下载)

本文详细解析了向Information Fusion投稿的全流程,从初稿准备到返修策略,涵盖了22个关键细节。特别强调了投稿前的隐形门槛、LaTeX模板的字体陷阱、图表规范要求以及返修回复的进阶技巧,帮助研究者避免常见错误,提升稿件接受率。附有实用模板下载,助力学术写作效率提升。

tgb34567890的博客 1420

Hive两大优化类型(详解)

hive优化。

中长跑路上的crush 219

C#报表,使用微软rdlc模板,生成Excel, PDF, Word, Image文件,使用自定义对象做数据集不连接数据库

我项目是用vs2017 建的,.NET farmwork 4.7.2 这种报表可以用于任何模式的应用,web,桌面,因为这只是生成一个文件或者文件流 步骤比较详细啰嗦,其中有讲到rdlc怎么新建设计,如果已经会设计rdlc了的可以直接跳到底部看代码的执行结果, 底部还有源码下载链接,百度盘 首先控制台安装报表包 新建rdlc 报表 建立rdlc里要用的数据模型 模型建完,或者修改都要重新...

qq_35955916的博客 5203

ZYNQ通过AXI DMA实现PL发送连续大量数据到PS DDR

方案二是在PS端的MPU配置中,将DMA缓冲区所在的内存区域标记为“不缓存”(Device或Strongly Ordered类型),但这样CPU访问这些内存区的速度会大幅降低,需要根据实时性和数据正确性的需求做权衡。更妙的是,描述符链表可以做成一个环状队列,放在DDR里让DMA循环取走,从而实现持续不断的“流式”传输。用FPGA实现FFT硬件加速的系统中也是如此:PS向PL提交待处理的FFT数据,PL硬件加速计算后,DMA把结果写回DDR,全程CPU几乎只做配置调度,大量数据吞吐留给了硬件通道。

QQ_778132974的博客 175

hive调优汇总

mapjoin:默认打开 行列技术:join where => where + join 采用分区 列存储(加快查询速度) 压缩(减少磁盘IO) 合理设置map个数 块大小:max(1, min(快大小,Long的最大值)) 块大小一般设置128m数据 =》1个maptask distribute by rand(),将数据随机分区,保证每个分区的数据流基本一致 合理设置reduce个数;可以根据数据量适当增加reduce个数; 小文件如何产生? 动态分区 reduce个数设置的过多;分区的key.

秃头小姐姐 307

AI测试实战:手把手教你做LLM(大模型)性能测试「含完整代码」

大模型API性能测试是评估模型服务响应能力、吞吐量和资源效率的关键手段。核心指标包括总响应时间、吐字率、首token延迟、输入/输出tokens数量、QPM等。测试流程涵盖构造负载、并发请求、数据采集和指标计算。优化建议针对吐字率低、首token延迟高、QPM偏低等问题,从模型、硬件、系统等多层面提出解决方案。

blues_C的博客 1431

Hive中的基本优化 + 索引优化 + 数据倾斜优化

运行的过程当中,有多个Reduce,每个Reduce拿到的数据不均匀,其中有一个或几个拿到的数据远远大于其他reduce拿到的数量,此时任务出现了数据倾斜;

机械工程跑路哥 1092

保姆级YOLOv8改进 | 基于DWRSeg扩张式残差机制的小目标检测优化(附修改后的C2f与Bottleneck模块)

DWRSeg机制:通过动态权重调整和扩张卷积有效提升了小目标的检测能力。C2f和Bottleneck模块修改:通过集成DWRSeg模块,增强了特征提取和残差学习能力。实验结果:在多个应用场景中,改进后的YOLOv8展现了更高的检测精度,特别是在小目标检测中表现突出。

一键难忘的博客 3217

Ambari 安装部署教程(手把手教学)【超级详细】

本文为读者提供了一套超详细的 Apache Ambari 安装部署教程,采用手把手教学方式,适合初学者及大数据运维人员。内容涵盖前期准备、环境配置、Ambari Server 与 Agent 安装、集群初始化配置、常见问题排查等全流程操作,确保用户能够顺利搭建稳定的 Hadoop 大数据平台管理系统。

Five的博客 1万+

13.107.最全的Hive 优化方案汇总:临时参数的作用域、切分大文件、合并小文件、设置 Map 和 Reduce 的内存大小、设置 Map 和 Reduce 的堆大小设置 等

13.107.最全的Hive 优化方案汇总:1.1.8. 临时参数的作用域:1.1.10.切分大文件1.1.11.合并小文件1.1.12.设置 Map 和 Reduce 的内存大小1.1.13.设置 Map 和 Reduce 的堆大小设置1.1.14.开启Combiner功能:在map端预聚合1.1.15.拓扑图,优化并行执行1.1.16. 万能方法1:一个MR,拆成多个(即纵向拆分),为了降低数据倾斜的压力。【比较少用】

涂作权的博客 1659

最全教程cadence建立个人CIS数据库

此时如果你删除office365,再装Access数据库,可以安装上,然后你再装office365,系统又会把Access软件给你删除掉,因为冲突了。可以在自己的电脑上新建CIS库,主要包含下面几个内容:数据库文件,原理图封装,PCB封装,数据手册,另外建议做一个器件命名的说明。allegro在调用封装的时候,是看的.psm文件,而不是.dra文件,因此只要是c0402.psm,那么所有的内容都要保持一致。(1)文件夹不要有中文,不要有空格,否则无法识别,可以参考博主的方式,全部使用英文输入法下划线。

D_Katter的博客 250

山大软工实践hive(5)-逻辑优化(1)

2021SC@SDUSC 逻辑优化 逻辑优化,顾名思义,就是通过调整语句的执行顺序,或者优化语句,减少时间、内存上的开销。许多思路与普通数据库的查询优化一样。根据这一阶段输入输出都是DAG,可以认为是用过调整DAG的结构达到目的。 几种方式 参考他人博客有以下几种方式 谓词下推 让选择运算优先执行,比如 select 1 from a join b on a.id=b.id where a.id=5 and b.id>10,会优先执行a.id=5与b.id>10,然后再进行join操作,因为jo

meloneatingguy的博客 881

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

山大软工实践hive(14)-总结

2021SC@SDUSC 结束

meloneatingguy的博客 979

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

山大软工实践hive(13)-查看逻辑优化在总体流程上的位置

2021SC@SDUSC 查看逻辑优化在总体流程上的位置

meloneatingguy的博客 1497

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

山大软工实践hive(7)-查看各优化器内容

2021SC@SDUSC 山大软工实践hive(7)-查看各优化器内容 文章目录山大软工实践hive(7)-查看各优化器内容ConstantPropagate PointLookupOptimizer PartitionColumnsSeparator ConstantPropagate 这个意外地眼熟,对应的是常量折叠3种的逻辑优化(在第5篇提到),能看出它的优化形式是从根节点遍历DAG ...

meloneatingguy的博客 1554

山大软工实践hive(12)-逻辑优化过程中的六种基础接口的作用与关系的梳理

2021SC@SDUSC 逻辑优化过程中的六种基础接口的梳理 Node,Rule,GraphWalker,Dispatcher,NodepPocessor,NodepPocessorCtx

meloneatingguy的博客 1563

山大软工实践hive(11)-ConstantPropagate优化器的流程

2021SC@SDUSC

meloneatingguy的博客 367

山大软工实践hive(4)-join算子

2021SC@SDUSC 标题 文章目录标题杂碎common joinMap joinBucketMapJoinSMB joinSkew Join参考 杂碎 hive支持等值join,但不支持非等值join,也就是涉及<>的比较在join后进行 common join 在Mapper阶段读取表的数据转换为键值对,经过shuffle让有相应key的输出到相应Reducer 在JoinOperator process方法中 // The input is sorted by alias

meloneatingguy的博客 300

山大软工实践hive(2)-解析输入(OPTree是什么)

2021SC@SDUSC 魔鬼博客1,4推理 源码operator执行顺序分析 序列化反序列化 transient “Hive的本质是一条SQL生成的一系列Operators,并执行它们 每个Operators的原理和适应条件,决定查询的性能 这里的代码是” ...

meloneatingguy的博客 394

山大软工实践hive(9)-dispatch关于minCost的计算

2021SC@SDUSC 山大软工实践hive(9)-dispatch关于minCost的计算 文章目录山大软工实践hive(9)-dispatch关于minCost的计算从DefaultRuleDispatcher开始以上内容的总结接下来 上一节说到要去看dispatcher,并已经梳理了大致步骤,现在要去理解。 从初始化看是DefaultRuleDispatcher 从DefaultRuleDispatcher开始 追踪dispatcher.dispatch(nd, ndStack, nodeOutp

meloneatingguy的博客 790

山大软工实践hive(1)-配置,规划

2021SC@SDUSC 山大2019级软件工程应用与实践-hive(0)配置,分工 配置 虚拟机:CentOS+VMware WorkStation

meloneatingguy的博客 177

从技术突破到场景落地:大模型发展图谱与DeepSeek创新应用【中山大学】

DeepSeek通过“技术突破-场景适配-生态共建”的三维路径,成为大模型商业化落地的标杆。

石榴姐yyds 1256

Flink对接Azure存储:wasb与abfs协议选型与生产实践

分布式计算框架进行流批处理时,文件系统协议的选型直接影响作业稳定性与性能。Azure Blob Storage与ADLS Gen2底层语义差异显著,wasb协议模拟目录结构导致元数据操作开销大,而abfs依托分层命名空间支持原子重命名,更适配Flink的Checkpoint机制。理解这两种协议的原理,有助于在云上构建高可靠的数据管道。实际生产中,使用abfss协议配合AAD认证,能有效避免认证冲突与权限泄露风险。面对Flink作业迁移或故障排查,从协议维度入手,往往能快速定位连接超时、文件一致性等问题。本文

weixin_33860553的博客 544

ClickHouse实战指南:从选型部署到性能优化与故障排查

在OLAP分析需求日益增长的背景下,列式存储数据库凭借其高吞吐、低延迟的聚合查询能力,成为大数据分析场景中的热门选择。ClickHouse通过按列存储与向量化执行引擎,大幅减少磁盘IO,在TB级数据量下实现秒级响应,为报表、监控大盘等场景提供了高效支撑。同时,分布式集群的部署与管理是落地过程中的关键环节,涉及分片、副本、Keeper协调及认证配置等细节,稍有不慎便会引发连接异常。数据安全方面,全量快照加增量备份的结合能有效降低误操作风险;而在性能调优上,建表设计、SQL写法与系统监控缺一不可。本文从选型判断

weixin_34072637的博客 151
上一篇: 山大软工实践hive(5)-逻辑优化(1)
下一篇: 山大软工实践hive(7)-查看各优化器内容
meloneatingguy
博客等级 码龄7年 1粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值