阿里云空间可以做网站吗,专业的传媒行业网站开发,网站建设的文件,比较流行的sns营销网站一、Hive性能调优使用工具
HiveSQL是一种声明式语言#xff0c;用户提交的交互式查询#xff0c;Hive会将其转换成MR任务。
常用调优工具
1.EXPLAIN
Hive提供EXPLAIN命令显示查询语句的执行计划#xff0c;通过显示信息可以了解Hive如何将查询转换为MR。
语法及释义用户提交的交互式查询Hive会将其转换成MR任务。
常用调优工具
1.EXPLAIN
Hive提供EXPLAIN命令显示查询语句的执行计划通过显示信息可以了解Hive如何将查询转换为MR。
语法及释义
#EXTENDED:提供执行计划关于操作的额外信息比如文件路径
#DEPENDENCY:提供JSON格式的输出包括查询所依赖的表和分区的列表
#AUTHORIZATION提供所有需要授权的实体包括查询的输入输出和认证失败
EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] queryEXPLAIN输出包括三个部分
查询的抽象语法树执行计划中不同stage之间的依赖关系每个stage的描述信息主要显示了操作与数据的对应关系
2.ANALYZE
ANALYZE关键字可以搜集表的数值统计信息用于执行计划选择的参考。
语法
# noscan参数表示不会扫描文件数据统计速度会更快
ANALYZE TABLE tablename [PARTITION(col1[val1], col2[val2],…)]
COMPUTE STATISTICS [noscan]统计字段含义
统计字段说明numPartitions分区个数numFiles文件个数totalSizeHDFS存储空间大小rawDataSize原始数据大小未压缩numRows行数
二、优化MapTask和ReduceTask个数
1.MapTask数量对Hive的影响
MapTask数量过大会造成Map阶段输出文件太小产生过多小文件对HDFS造成压力创建Map开销大MapTask数量太小文件处理或查询并行度低Job执行时间过长性能不高。
2.设置MapTask数量
减少MapTask数量可以通过合并目录下的文件实现增加MapTask数量可以通过增加其依赖的前一个Job的Reduce个数产生更多的文件来增加。
ReduceTask数量的设定极大影响任务执行效率 。
默认情况Hive会计算确定Reduce个数。
# 每个Reduce任务处理的数据量默认是1G
hive.exec.reducer.bytes.per.reducer
# 每个任务最大的Reduce个数默认是999
hive.exec.reducer.max# 用户自定义调整Reduce个数
hive.exec.reducer.bytes.per.reducer三、Hive Job优化
1.使用本地模式运行任务
适合待处理的数据很小的情况启动分布式数据处理是一种开销完全启动分布式模式的时间较长
2.设置本地模式运行任务
# 临时设置方式。注意作业必须满足条件才能本地模式运行作业总输# 入大小必须低于2中设置的值#Map任务总数必须小于属性3中设置的# 值Reduce任务总数必须是1个或者0个
1. hiveset hive.exec.mode.local.autotrue;--default false
2. hiveset hive.exec.mode.local.auto.inputbytes.max50000000;
3. hiveset hive.exec.mode.local.auto.input.files.max5;--default 43.JVM重用
适合轻量级的作业启动JVM的过程是一种开销通过共享JVM来重用JVM以串行方式运行MR Job
设置JVM重用运行MR Job
#设置需在hive-site.xml中添加属性设置该默认值是1JVM重用只 #能在同一个job中的Map和Reduce任务起作用对于不同Job的任务仍然是运行在独立的JVM。
hiveset mapred.job.reuse.jvm.num.tasks5;4.并行执行
Hive会将一个查询转换成一个或多个stage按顺序执行将这些stage并行执行可以缩短整个Job的执行时间。
设置并行执行
property
namehive.exec.parallel/name
valuetrue/value
/property
property
namehive.exec.parallel.thread.number/name
value16/value
/property5.推测执行
适合负载不均衡同一Job的不同Task运行速度不同的情况Hadoop采用推测执行机制将执行慢的Task加入黑名单并为这样的Task启动备份任务选择先完成的计算结果。
设置推测执行
#需在$HADOOP_HOME/conf/mapred-site.xml中添加属性设置
mapred.map.tasks.speculative.execution设置为true
mapred.reduce.tasks.speculative.execution设置为true6.合并小文件
Hive实际存储数据是在HDFS上小文件过多将影响性能通过合并Map和Reduce的结果文件可避免这种影响
设置合并小文件
#是否合并Map输出文件
hive.merge.mapfile属性设置为true
#是否合并Reduce输出文件
hive.merge.mapredfiles属性设置为true
#合并文件的大小
hive.merge.size.per.task属性设置为256*1000*1000四、Hive Query优化
1.列裁剪
Hive查询时只查询需要使用的列效率会更高列裁剪相关属性为hive.optimize.cp,默认值为true
2.分区裁剪
当有需求对目标表的某个分区数据进行查询时
# 分区裁剪的配置
propertynamehive.optimize.pruner/namevaluetrue/value
/property3.JOIN
将小表或子查询放在Join操作符左边可以减少内存溢出错误发生的概率对小表连接时可使用MapJoin在Map阶段完成Join操作避免发生shuffle提高Join操作的效率
Join优化设置
#自动使用MapJoin优化默认为true
hive.auto.convert.join
#通过该属性这是使用MAPJOIN优化表的大小如果表的大小小于该设置值就会被加载进内存中默认值是250M
hive.mapjoin.smalltable.filesize4.GROUP BY操作
在Map端进行部分聚合操作在Reduce端得出最终结果
设定在Map端进行Group by操作
propertynamehive.map.aggr/namevaluetrue/value
/property
#设定map端进行聚合的条目数
propertynamehive.groupby.mapaggr.checkinierval/namevalue100000/value
/property五、设置压缩
1.数据压缩
MR性能瓶颈主要在于网络I/O和磁盘I/O采用数据压缩是减少数据量、提高性能的很好的方式
常用数据压缩方法
压缩算法是否支持拆分Hive自带压缩率压缩/解压缩速度gzip否是很高比较快lzo是是比较高很快snappy否是比较高很快bizp2是否最高慢
2.配置压缩
中间数据压缩在MR的shuffle阶段对Map端产生的中间结果数据进行压缩
#激活hive中间数据压缩默认为False
hive.exec.compress.intermediate属性设置为true最终数据压缩可控制对最终输出内容的压缩
#激活hive最终数据压缩默认为False
hive.compress.output属性设置为true六、SQL本身的优化
只select需要的列避免select *where条件写在子查询中先过滤再关联关联条件写在on中而不是where中数据量大时用group by代替count distinct数据量小时用in代替join避免笛卡尔积join时大表放后面使用相同的连接键严格格式
Hive.mapred.mode分 nonstrictstrict默认是nonstrict 如果设置为strict对三种情况限制 1分区表必须加分区。 2order by 必须使用limit 3存在笛卡尔积