- limit限制调整
--因为使用limit语句时候,是先执行整个查询语句,然后再返回部分结果的
set hive.limit.optimize.enable=true;
set hive.limit.row.max.size=10000;
set hive.limit.optimize.limit.file=10;
2.JOIN优化
。。。
3. 本地模式
--hive尝试使用本地模式执行查询,要不然hive会使用MapReduce来执行其他所有的查询
set hive.exec.mode.local.auto=true;
4.并行执行
set hive.exec.parallel=true;
5.严格模式
--对分区表进行查询,在where子句中没有加分区过滤的话,将禁止提交任务(默认:nonstrict)
set hive.mapred.mode=strict;
注:使用严格模式可以禁止3种类型的查询:
(1)对于分区表,不加分区字段过滤条件,不能执行
(2)对于order by语句,必须使用limit语句。
(3)限制笛卡尔积的查询(join的时候不使用on,而使用where的)。
6.调整mapper和reducer个数
set hive.exec.reducers.max=(集群总reduce槽位个数*1.5)/(执行中的查询的平均个数)
7.JVM重用
set mapred.job.reuse.jvm.num.tasks=10; --10为重用个数
8.索引
索引可以加快含有group by语句的查询的计算速度
9.动态分区调整
--动态分区属性:设置为true表示开启动态分区功能(默认为false)
hive.exec.dynamic.partition=true;
--动态分区属性:设置为nonstrict,表示允许所有分区都是动态的(默认为strict)
--设置为strict,表示必须保证至少有一个分区是静态的
hive.exec.dynamic.partition.mode=strict;
--动态分区属性:每个mapper或reducer可以创建的最大动态分区个数
hive.exec.max.dynamic.partitions.pernode=100;
--动态分区属性:一个动态分区创建语句可以创建的最大动态分区个数
hive.exec.max.dynamic.partitions=1000;
--动态分区属性:全局可以创建的最大文件个数
hive.exec.max.created.files=100000;
--控制DataNode一次可以打开的文件个数
--这个参数必须设置在DataNode的$HADOOP_HOME/conf/hdfs-site.xml文件中
<property>
<name>dfs.datanode.max.xcievers</name>
<value>8192</value>
</property>
10.推测执行
--目的:是通过加快获取单个task的结果以及进行侦测将执行慢的TaskTracker加入到黑名单的方式来提高整体的任务执行效率
(1)修改 $HADOOP_HOME/conf/mapred-site.xml文件
<property>
<name>mapred.map.tasks.speculative.execution </name>
<value>true</value>
</property>
<property>
<name>mapred.reduce.tasks.speculative.execution </name>
<value>true</value>
</property>
(2)修改hive配置
set hive.mapred.reduce.tasks.speculative.execution=true;
11.单个MapReduce中多个group by
--多个group by操作组装到单个MapReduce任务中
set hive.multigroupby.singlemr=false;
12.虚拟列
--当hive产生了非预期的或null的时候,可以通过虚拟列进行诊断,判断哪行数据出现问题
INPUT__FILE__NAME (输入文件名)
BLOCK__OFFSET__INSIDE__FILE (块内偏移量)
ROW__OFFSET__INSIDE__BLOCK (行偏移量,需要设置hive.exec.rowoffset=true;启用)
13. 其他参数调优
--开启CLI提示符前打印出当前所在的数据库名
set hive.cli.print.current.db=true;
--让CLI打印出字段名称
hive.cli.print.header=true;
--提高聚合的性能
set hive.map.aggr=true;
--对于简单的不需要聚合的类似SELECT <col> from <table> LIMIT n语句,不需要起MapReduce job,直接通过Fetch task获取数据
set hive.fetch.task.conversion=more;
相关推荐
HDP平台的Hive性能调优——Hive高性能最佳实践, HDP平台的Hive性能调优——Hive高性能最佳实践
Hive调优,数据工程师成神之路。
hive查询优化实践总结 optimizing hive queries, 详细描述了一些经典hive查询优化方法
数据量大不是问题,数据倾斜是个问题 jobs数比较多的作业运行效率相对比较低,比如及时有几百行的表,如果多次关联汇总,产生十几个jobs,耗时很长,原因是map reduce作业初始化的时间是比较长的
本文主要是从Hive参数配置及应用程序设计与开发的角度,总结几种常用的性能优化方法
查找性能低下的原因;分析性能低下的根源;从配置及程序角度进行优化。
hive,性能调优,全方面提升认知
hive+Mapreduce 编程性能调优
利用Hive进行复杂用户行为大数据分析及...13_Hive中的常见调优 14_Hive中的数据倾斜及解决方案-三种join方式 15_Hive中的数据倾斜及解决方案-group by 16_Hive中使用正则加载数据 17_Hive中使用Python脚本进行预处理
Hive性能优化 数据倾斜 hql优化 count(distinct)优化
hive执行效率低下,可以适当调整默认参数,加快执行速度
hive 优化经典。pdf文档。 讨论常见的hive执行瓶颈,对sql的写法和效率较低的情况进行分析和调优
Hive性能调优实战
HIVE优化实战分享 HIVE优化实战分享 HIVE优化实战分享
Adam Muise是Hortonworks的解决方案工程师,他在多伦多举办的HUG上做了一个关于如何调优Hive的演讲,长达91页的PPT干货十足,从Hive的基本架构、Hive如何存取数据讲起,到如何调优的基本知识,最后介绍了个叫Stinger...
HIVE基础入门资料,主要目录包含Hive概述、HIve SQL基础、...希望授课对象能够掌握数据仓库工具Hive的高级语法、Hive性能调优等的相关知识 具备在真实环境中使用Hive,排查调优Hive的执行语句,处理系统故障等实操技能
一个Hive查询生成多个mapreducejob,一个mapreducejob又有map,reduce,spill,shuffle,sort等多个阶段,所以针对hive查询的优化可以大致分为针对MR中单个步骤的优化(其中又会有细分),针对MR全局的优化,和针对...
1.Spark性能优化的第一步,就是要在开发Spark作业的过程中注意和应用一些性能优化的基本原则。开发调优,就是要让大家了解以下一些Spark基本开发原则,包括:RDD lineage设计、算子的合理使用、特殊操作的优化等。在...
Spark性能优化的第一步,就是要在开发Spark作业的过程中注意和应用一些性能优化的基本原则。开发调优,就是要让大家了解以下一些Spark基本开发原则,包括:RDD lineage设计、算子的合理使用、特殊操作的优化等。在...