大数据hive性能调优详解系列之hive架构层面调优_数仓工程师必备hive调优方案

大数据-数据仓库-Hive总结及性能优化 Hive是构建在Hadoop之上的数据仓库软件。它提供类似sql的查询语句HiveQL对数据进行分析处理,Hive将HiveQL语句转换成一系列MapReduce作业并执行。 阅读详情

大数据技术框架中,hive组件作为数仓工程师必不可缺少的计算框架组件。本篇文章是hive性能调优详解系列之第三篇hive语法层面调优。
上两篇分别为
hive 建设表层面调优
hive 语法和参数层面调优
更多内容请关注哔哩:老姜的数据江湖,微信公众号同步;

Hive架构层面

1.启用本地抓取

Hive的某些SQL语句需要转换成MapReduce的操作,某些SQL语句就不需要转换成MapReduce操作,例如:

1.只是select *的时候
2.where条件针对分区字段进行筛选过滤时
3.带有limit分支语句时

Hive从HDFS中读取有两种方式:启用MapReduce读取和直接抓取。
直接抓取数据比MapReduce方式读取数据要快的多,但是只有少数操作可以使用直接抓取方式。
可以通过hive. fetch. task, conversion参数来配置在什么情况下采用直接抓取方式:

minimal:只有select *、在分区字段上where过滤、有limit这三种场景下才启用直接抓取方 式。
more:在select、where筛选「limit时,都启用直接抓取方式。

查看Hive的抓取策略:

##查看 set hive.fetch.task.conversion;

设置Hive的抓取策略:

##默认more set hive.fetch.task.conversion=more;

请看hive-default.xml中关于这个参数的解释:

<property>
<name>hive.fetch.task.conversion</name>
<value>more</value>
<description>
Expects one of [none, mi nimal, more].
Some select queri es can be converted to single FETCH task minimizing latency.
Currently the query should be si ngle sourced not havi ng any subquery and should not have
any aggregations or di sti ncts (whi ch i ncurs RS), lateral vi ews and
joi ns.
0. none : di sable hive.fetch.task.conversion
1.minimal : select star, filter on partition columns, limit only
2.more : SELECT, FILTER, LIMIT only (support TABLESAMPLE and vi rtual
columns)
</descri ption>
</property>
<property>
<name>hive.fetch.task.conversion.threshold</name>
<value>1073741824</value>
<descri pti on>
input threshold for applying hive.fetch.task.conversion, if target table is native, input 1ength
is calculated by summation of file 1engths. if it's not native, storage handler for the table
can optionally implement
org.apache, hadoop. hive, ql. metadata. inputEstimator iinterface.
</descri ption>
</property>

2.本地执行优化

Hive在集群上查询时,默认是在集群上多台机器上运行,需要多个机器进行协调运行,这种方式很好的解决了大数据量的查询问题。但是在Hive查询处理的数据量比较小的时候,其实没有必要启动分布式模式去执行,因为以分布式方式执行设计到跨网络传输、多节点协调等,并且消耗资源。对于小数据 集,可以通过本地模式,在单台机器上处理所有任务,执行时间明显被缩短。
启动本地模式涉及到三个参数:

##打开hive自动判断是否启动本地模式的开关 set hive.exec.mode.local.auto=true;
##map任务晝專大值,*启用本地模式的task最大皋数 set hive.exec.mode.1ocal.auto.input.files.max=4;
##map输入文件最大大小,不启动本地模式的最大输入文件大小 set hive.exec.mode.1ocal.auto.inputbytes.max=134217728;

3. JVM 重用

Hive语句最终会转换为一系的MapReduce任务,每一个MapReduce任务是由一系的MapTask 和ReduceTask组成的,默认情况下,MapReduce中一个MapTask或者ReduceTask就会启动一个 JVM进程,一个Task执行完毕后,JVM进程就会退出。这样如果任务花费时间很短,又要多次启动 JVM的情况下,JVM的启动时间会变成一个比较大的消耗,这时,可以通过重用JVM来解决。

set mapred.job.reuse.jvm.num.tasks=5;

JVM也是有缺点的,开启JVM重用会一直占用使用到的task的插槽,以便进行重用,直到任务完成后才会释放。如果某个不平衡的job中有几个reduce task执行的时间要比其他的reduce task消耗的时间要多得多的话,那么保留的插槽就会一直空闲却无法被其他的job使用,直到所有的task都结束了才 会释放。
根据经验,一般来说可以使用一个cpu core启动一个JVM,假如服务器有16个cpu core,但是这个节点,可能会启动32个mapTask,完全可以考虑:启动一个JVM,执行两个Task

4.并行执行

有的查询语句,Hive会将其转化为一个或多个阶段,包括:MapReduce阶段、抽样阶段、合并阶段、 limit阶段等。默认情况下,一次只执行一个阶段。但是,如果某些阶段不是互相依赖,是可以并行执行的。多阶段并行是比较耗系统资源的。
—个Hive SQL语句可能会转为多个MapReduce Job,每一个job就是一个stage,这些Job顺序执行,这个在client的运行日志中也可以看到。但是有时候这些任务之间并不是是相互依赖的,如果集群资源允许的话,可以让多个并不相互依赖stage并发执行,这样就节约了时间,提高了执行速度,但是如果集群资源溃泛时,启用并行化反倒是会导致各个Job相互抢占资源而导致整体执行性能的下降。启用并行化:

##可以开启并发执行。
set hive.exec.parallei=true;
##同一个sql允许最大并行度,默认为8。
set hive.exec.paral1 el.thread.number=16;

5.推测执行

在分布式集群环境下,因为程序Bug (包括Hadoop本身的bug),负载不均衡或者资源分布不均等原因,会造成同一个作业的多个任务之间运行速度不一致,有些任务的运行速度可能明显慢于其他任务
(比如一个作业的某个任务进度只有50%,而其他所有任务已经运行完毕),则这些任务会拖慢作业的整体执行进度。为了避免这种情况发生,Hadoop采用了推测执行(Speculative Execution)机制,它根据一定的法则推测出"拖后腿"的任务,并为这样的任务启动一个备份任务,让该任务与原始任务同时处理同一份数据,并最终选用最先成功运行完成任务的计算结果作为最终结果。

#启动mapper阶段的推测执行机制 set mapreduce.map.speculative=true;
#启动reducer阶段的推测执行机制 set mapreduce.reduce.speculative=true;

建议:

如果用户对于运行时的偏差非常敏感的话,那么可以将这些功能关闭掉。如果用户因为输入数据量很大而需要执行长时间的MapTask或者ReduceTask的话,那么启动推测执行造成的浪费是非常巨大大。

设置开启推测执行参数:Hadoop的mapred-site.xml文件中进行配置

<property>
<name>mapreduce.map.speculative</name>
<value>true</value>
<description>lf true, then multiple i nstances of some map tasks may be executed i n parallel.</description>
</property>
<property>
<name>mapreduce.reduce.speculati ve</name>
<value>true</value>
<descri pti on>lf true, then multi ple i nstances of some reduce tasks may be executed in parallel.</description>
</property>

Hive本身也提供了配置项来控制reduce-side的推测执行

<property>
<name>hive.mapped.reduce.tasks.speculative.executi on</name>
<value>true</value>
<description>whether speculative execution for reducers should be turned on. </description>
</property>

关于调优这些推测执行变量,还很难给一个具体的建议。如果用户对于运行时的偏差非常敏感的话,那么可以将这些功能关闭掉。如果用户因为输入数据量很大而需要执行长时间的mapTask或者 reduceTask的话,那么启动推测执行造成的浪费是非常巨大。

6. Hive严格模式

所谓严格模式,就是强制不允许用户执行有风险的HiveQL语句,一旦执行会直接报失败。在Hive中为了提高SQL语句的执行效率,可以设置严格模式,充分利用Hive的某些特点。
##设置Hive的严格模式

set hive.map red.mode=strict;
set hive.exec.dynamic.partition.mode=nostrict;

注意:当设置严格模式之后,会有如下限制:

1.对于分区表,必须添加where对于分区字段的条件过滤 seiect * from student_ptn where age > 25
2.order by语句必须包含limit输出限制 seiect * from student order by age 1imit 100;
3.限制执行笛卡尔积的查询 select a., b. from a, b;
4.在hive的动态分区模式下,如果为严格模式,则必须需要一个分区列式静态分区

大数据从业者必知必会的Hive SQL调优技巧 | 京东云技术团队 在HDFS中,每个小文件对象约占150字节的元数据空间,如果有大量的小文件存在,将会占用大量的内存资源。根据集群的配置和资源情况,合理调整Hive查询的并行度和资源分配,可以提高查询的并发性和整体性能。COUNT DISTINCT操作需要用一个Reduce Task来完成,这一个Reduce需要处理的数据量太大,就会导致整个Job很难完成,一般COUNT DISTINCT使用先GROUP BY再COUNT的方式替换,虽然会多用一个Job来完成,但在数据量大的情况下,这个绝对是值得的。 阅读详情

相关推荐

大数据开发写sql写烦了,要不要转?

如果说大数据是每天写sql还不太精准(精准的是用各种方式写SQL) 当你不创造东西时,你只会根据自己的感觉而不是能力去看待问题。会不会转别的,看个人兴趣,大数据方向还有那么多。 瞅瞅方向:如数据分析师、大数据开发工程师、大数据分析师、数据开发工程师、大数据架构师、大数据运维工程师、ELT工程师、数据仓库工程师、大数据BI工程师等。丰富自己的能力,到处都机会。现如今,正式为了应对大数据的这几个特点,开源的大数据框架越来越多,越来越强,先列举一些常见的: 文件存储:Hadoop HDFS、Tachyon、

m0_57290404的博客 5069

hive调优之hive架构层面

启动本地抓取 Hive 的某些 SQL 语句需要转换成 MapReduce 的操作,某些 SQL 语句就不需要转换成 MapReduce 操作,但是需要注意,理论上来说,所有的 SQL 语句都需要转换成 MapReduce 操作,只不过Hive 在转换 SQL 语句的过程中会做部分优化,使某些简单的操作不再需要转换成 MapReduce,例如: 只是select * 查询操作 where条件只对分区字段进行筛选 带有limit分支语句 Hive 从 HDFS 中读取数据,有两种方式启用MapReduce

https://starzy1990.github.io/ 360

CentOS7下用FreeRADIUS+AD实现802.1X认证完整指南(附华为交换机配置)

本文提供了在CentOS 7系统上部署FreeRADIUS并与Windows Active Directory集成,以实现企业级802.1X网络认证的完整实战指南。内容涵盖从架构原理、服务器配置(包括Kerberos、Samba Winbind集成)、FreeRADIUS核心设置与AD联动,到华为交换机的详细配置步骤。重点解决了生产环境中常见的高可用、动态VLAN下发及深度排错问题,为企业构建集中、安全的网络准入控制体系提供了经过验证的解决方案。

weixin_29273849的博客 406

Hive第三讲 调优

hive 调优1.调优概述1、Hive的建表设计层面1.1利用分区表优化1.2 利用分桶表优化1.3 选择合适的文件存储格式1.4 选择合适的压缩格式2、HQL语法和运行参数层面2.1.查看Hive执行计划2.2列裁剪2.3 分区裁剪2.4 谓词下推 1.调优概述 Hive调优的作用:在保证业务结果不变的前提下,降低资源的使用量,减少任务的执行时间。 1、Hive的建表设计层面 1.1利用分区表优化 当一个 Hive 表的查询大多数情况下,会根据某一个字段进行筛选时,那么非常适合创建为分区表,该字段即为分

u010160949的博客 623

citespace基本操作

聚类分析 时间线图 这些结果都是高被引文献的相关呈现结果,代表该领域的文献基础 下面可以看看该project的前沿领域 选择keywords 和term go! 调整显示方式 生成凸线图:表示 在某个研究领域或者时间段内 ,大家对某个领域或者某个词的关注度突然增高,凸显前沿方向的转变 以此来发现热点 ...

生信小博士的博客 1万+

生信人的一天~HIFI数据+HIC数据组装基因组

HIFI+HIC数据组装基因组!

qq_43337286的博客 9530

Hive:启动JVM堆内存配置

Hive:运行日志信息配置

程序员无羡的博客 989

在 Windows 系统下使用 VMware 安装 Ubuntu 24.04 LTS 系统

Ubuntu24.04桌面端官方下载:https://cn.ubuntu.com/download/desktop。

u014695938的博客 1万+

记录一次hive的JVM调优

关于Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. GC overhead limit exceeded 解决过程 1.查看集群负载情况,可以通过jstat | jmap | jconsole 等命令查看 使用jstat -gc pid 5000 输出情况 这个是报错之后截取的,其实看看得出除开O区其他都还好 如果我想去调节hive的JVM堆和垃圾回收该怎么改呢? 先去看一下启动文件

weixin_44925880的博客 928

SRAM compiler中 Number of banks 设置

的值时,需要考虑应用的性能需求、功耗要求和面积限制。设计者应根据具体的应用场景选择合适的bank数量,以优化整体系统性能。bank是一种用于分离存储器访问的设计结构,允许同时对不同的存储区域进行读写操作,从而提高存储器的并发访问性能。选项用于指定 SRAM 存储器的 并发存储区域。在 SRAM 编译器中,

hzmscut的博客 1871

基于Python的二手奢侈品电商平台商品保值率数据爬取与分析

本文旨在探讨如何利用Python网络爬虫技术获取二手奢侈品电商平台商品数据,并通过数据分析研究奢侈品的保值率特性。研究将使用最新的爬虫技术(包括Playwright、异步处理和数据清洗技术)来高效获取数据,并利用Pandas、Matplotlib等数据分析库进行深入的数据可视化分析。本文详细介绍了爬虫的设计思路、实现过程以及数据分析方法,为奢侈品投资和消费提供数据参考。关键词:Python爬虫、奢侈品保值率、数据分析、Playwright、异步处理。

2201_76125261的博客 512

Hive性能调优详解系列之hive建表设计层面调优_数仓工程师必备hive调优方案

Hive作为大数据领域常用的数据仓库组件,在平时设计和查询时要特别注意效率。影响Hive效率的从来不是数据量过大,而是数据倾斜、数据冗余、Job或I/O过多、MapReduce分配不合理等等。

老姜的数据江湖 1474

ADS基础教程22 - 有限元电磁仿真(FEM)

一、引言二、FEM操作过程1.新建Layout1.新建Layout2.EM设置3.设置Frequency plan4.设置Output plan5.设置Options6.设置网格频率7.仿真结果三、总结介绍了在ADS中如何进行FEM仿真过程。END!}}END!

XZ_ZC的博客 2580

大数据工程师的日常工作内容是干嘛?

我们真的是Sqlboy吗?

大数据指北 9214

人工智能数据治理——解读AI时代数据治理白皮书 2025【附全文阅读】

摘要:该白皮书面向企业数字化负责人及AI项目推进人员,探讨AI时代数据治理的战略升级。提出"好数据+好数据知识"双基石理念,强调数据需满足"三高"标准(高精度、一致性、时效性)并构建语义知识库。构建四层治理框架,包括数据采集处理、合规安全、知识库建设及质量改进,并介绍AI赋能治理的新范式,如智能ETL和治理Agent体系。同时分析"软件+AI+好数据"的应用模式,为企业实现智能数据治理提供实践指导。(149字)

cdfunlove的博客 633

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【程序员必备的面试技巧】大数据工程师面试必备技能

大数据工程师可以从事对大量数据的采集、清洗、分析、治理、挖掘,并对这些数据加以利用、管理、维护和服务的相关技术工作。本文讲述大数据工程师的面试技巧和必备技能。

Morse_Chen的博客 2369

数学建模模型总结

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

大数据从业者必知必会的Hive SQL调优技巧

COUNT DISTINCT操作需要用一个Reduce Task来完成,这一个Reduce需要处理的数据量太大,就会导致整个Job很难完成,一般COUNT DISTINCT使用先GROUP BY再COUNT的方式替换,虽然会多用一个Job来完成,但在数据量大的情况下,这个绝对是值得的。比如,select coll, col2 from your_table ,另外, where 条件中也尽量添加过滤条件,以去掉无关的数据行,从而减少整个 MapReduce 任务中需要处理、分发的数据量。

weixin_44066506的博客 1065

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: hive性能调优详解系列之hive语法和参数层面调优_数仓工程师必备hive调优方案
下一篇: HQL 报 return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 错误解决方案
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值