赞
踩
HiveSQL是一种声明式语言,用户提交的交互式查询,Hive会将其转换成MR任务。
Hive提供EXPLAIN命令显示查询语句的执行计划,通过显示信息可以了解Hive如何将查询转换为MR。
语法及释义:
- #EXTENDED:提供执行计划关于操作的额外信息,比如文件路径
- #DEPENDENCY:提供JSON格式的输出,包括查询所依赖的表和分区的列表
- #AUTHORIZATION:提供所有需要授权的实体,包括查询的输入输出和认证失败
- EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] query
EXPLAIN输出包括三个部分
ANALYZE关键字可以搜集表的数值统计信息,用于执行计划选择的参考。
语法:
- # noscan参数表示不会扫描文件数据,统计速度会更快
- ANALYZE TABLE tablename [PARTITION(col1[=val1], col2[=val2],…)]
- COMPUTE STATISTICS [noscan]
统计字段含义
统计字段 | 说明 |
numPartitions | 分区个数 |
numFiles | 文件个数 |
totalSize | HDFS存储空间大小 |
rawDataSize | 原始数据大小(未压缩) |
numRows | 行数 |
ReduceTask数量的设定极大影响任务执行效率 。
默认情况,Hive会计算确定Reduce个数。
- # 每个Reduce任务处理的数据量,默认是1G
- hive.exec.reducer.bytes.per.reducer
- # 每个任务最大的Reduce个数,默认是999
- hive.exec.reducer.max
- # 用户自定义调整Reduce个数
- hive.exec.reducer.bytes.per.reducer
- # 临时设置方式。注意,作业必须满足条件才能本地模式运行,作业总输# 入大小必须低于2中设置的值,#Map任务总数必须小于属性3中设置的# 值,Reduce任务总数必须是1个或者0个
- 1. hive>set hive.exec.mode.local.auto=true;--default false
- 2. hive>set hive.exec.mode.local.auto.inputbytes.max=50000000;
- 3. hive>set hive.exec.mode.local.auto.input.files.max=5;--default 4
设置JVM重用运行MR Job
- #设置需在hive-site.xml中添加属性设置,该默认值是1,JVM重用只 #能在同一个job中的Map和Reduce任务起作用,对于不同Job的任务,仍然是运行在独立的JVM。
- hive>set mapred.job.reuse.jvm.num.tasks=5;
设置并行执行
- <property>
- <name>hive.exec.parallel</name>
- <value>true</value>
- </property>
- <property>
- <name>hive.exec.parallel.thread.number</name>
- <value>16</value>
- </property>
设置推测执行
- #需在$HADOOP_HOME/conf/mapred-site.xml中添加属性设置
- mapred.map.tasks.speculative.execution设置为true
- mapred.reduce.tasks.speculative.execution设置为true
设置合并小文件
- #是否合并Map输出文件
- hive.merge.mapfile属性设置为true
- #是否合并Reduce输出文件
- hive.merge.mapredfiles属性设置为true
- #合并文件的大小
- hive.merge.size.per.task属性设置为256*1000*1000
当有需求对目标表的某个分区数据进行查询时
- # 分区裁剪的配置
- <property>
- <name>hive.optimize.pruner</name>
- <value>true</value>
- </property>
Join优化设置
- #自动使用MapJoin优化,默认为true
- hive.auto.convert.join
- #通过该属性这是使用MAPJOIN优化表的大小,如果表的大小小于该设置值就会被加载进内存中,默认值是250M
- hive.mapjoin.smalltable.filesize
在Map端进行部分聚合操作,在Reduce端得出最终结果
设定在Map端进行Group by操作
- <property>
- <name>hive.map.aggr</name>
- <value>true</value>
- </property>
- #设定map端进行聚合的条目数
- <property>
- <name>hive.groupby.mapaggr.checkinierval</name>
- <value>100000</value>
- </property>
常用数据压缩方法
压缩算法 | 是否支持拆分 | Hive自带 | 压缩率 | 压缩/解压缩速度 |
gzip | 否 | 是 | 很高 | 比较快 |
lzo | 是 | 是 | 比较高 | 很快 |
snappy | 否 | 是 | 比较高 | 很快 |
bizp2 | 是 | 否 | 最高 | 慢 |
中间数据压缩,在MR的shuffle阶段对Map端产生的中间结果数据进行压缩
- #激活hive中间数据压缩,默认为False
- hive.exec.compress.intermediate属性设置为true
最终数据压缩,可控制对最终输出内容的压缩
- #激活hive最终数据压缩,默认为False
- hive.compress.output属性设置为true
Hive.mapred.mode,分 nonstrict,strict,默认是nonstrict,
如果设置为strict,对三种情况限制:
(1)分区表必须加分区。
(2)order by 必须使用limit
(3)存在笛卡尔积
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。