Hive编程(十)【调优】
来源:互联网 发布:淘宝保证金有什么用 编辑:程序博客网 时间:2024/06/05 14:11
10.1 使用EXPLAIN
hive> DESCRIBE onecol;
number int
hive> SELECT * FROM onecol;
554
hive> SELECT SUM(number) FROM onecol;
14
使用EXPLAIN
hive> EXPLAIN SELECT SUM(number) FROM onecol;
10.2 EXPLAIN EXTENDED
使用EXPLAIN EXTENDED
将会输出更加完整的信息。
10.3 限制调整
LIMIT
语句需要执行整个查询,然后返回部分结果。
在Hive中有如下配置
<property>
<name>hive.limit.optimize.enable</name>
<value>true</value>
<description>Whether to enable to optimization to
try a smaller subset of data for simple LIMIT first.</description>
</property>
若hive.limit.optimize.enable
属性的值为true
,还会有两个属性控制LIMIT
hive.limit.row.max.size
<property>
<name>hive.limit.row.max.size</name>
<value>100000</value>
<description>When trying a smaller subset of data for simple LIMIT,
how much size we need to guarantee each row to have at least.
</description>
</property>
hive.limit.optimize.limit.file
<property>
<name>hive.limit.optimize.limit.file</name>
<value>10</value>
<description>When trying a smaller subset of data for simple LIMIT,
maximum number of files we can sample.</description>
</property>
10.4 Join优化
将数据集大的表放在JOIN
语句的右边。
10.5 本地模式
hive> set mapred.job.tracker=local;
hive> set mapred.tmp.dir=/home/edward/tmp;
hive> SELECT * from people WHERE firstname=bob;
也可以设置hive.exec.mode.local.auto
属性值为true
,让Hive处于本地模式运行。通常将这个配置写在$HOME/.hiverc
若要全局生效的话,将这个配置添加到$HIVE_HOME/conf/hive-site.xml
中
<property>
<name>hive.exec.mode.local.auto</name>
<value>true</value>
<description>
Let hive determine whether to run in local mode automatically
</description>
</property>
10.6 并行执行
Hive默认一次执行一个阶段。可以通过设置参数hive.exec.parallel
值为true
开启并发执行。
<property>
<name>hive.exec.parallel</name>
<value>true</value>
<description>Whether to execute jobs in parallel</description>
</property>
10.7 严格模式
Hive提供严格模式,防止用户执行一些意想不到或不良的查询。
通过设置属性hive.mapred.mode
值为strict
禁止3中类型的查询
- 分区表
除非WHERE
语句中含有分区字段过滤条件。否则不允许查询。即,不允许扫描所有分区。如:
hive> SELECT DISTINCT(planner_id) FROM fracture_ins WHERE planner_id=5;
FAILED: Error in semantic analysis: No Partition Predicate Found for
Alias "fracture_ins" Table "fracture_ins"
修改为以下的语句则正常输出
hive> SELECT DISTINCT(planner_id) FROM fracture_ins
> WHERE planner_id=5 AND hit_date=20120101;
- 使用
ORDER BY
的查询
使用ORDER BY
查询,要求必须使用LIMIT
语句。如:
hive> SELECT * FROM fracture_ins WHERE hit_date>2012 ORDER BY planner_id;
FAILED: Error in semantic analysis: line 1:56 In strict mode,
limit must be specified if ORDER BY is present planner_id
修改为以下的语句则正常输出:
hive> SELECT * FROM fracture_ins WHERE hit_date>2012 ORDER BY planner_id
> LIMIT 100000;
- 限制笛卡尔积
hive> SELECT * FROM fracture_act JOIN fracture_ads
> WHERE fracture_act.planner_id = fracture_ads.planner_id;
FAILED: Error in semantic analysis: In strict mode, cartesian product
is not allowed. If you really want to perform the operation,
+set hive.mapred.mode=nonstrict+
修改为以下的语句则正常输出:
hive> SELECT * FROM fracture_act JOIN fracture_ads
> ON (fracture_act.planner_id = fracture_ads.planner_id);
10.8 调整mapper和reducer个数
通过设置hive.exec.reducers.max
阻止查询消耗太多的reduce
资源。有必要将该属性配置到$HIVE_HOME/conf/hive-site.xml
中。对该属性值大小计算的公式如下:
(集群总Reduce槽位个数*1.5)/(执行中查询的平均个数)
在集群环境中
10.9 JVM重用
10.10 索引
索引用来加快GROUP BY
语句的查询速度。
10.11 动态分区调整
10.12 推测执行
10.13 耽搁MapReduce中多个Group By
10.14 虚拟列
- Hive编程(十)【调优】
- Hive编程指南09---调优
- 【Hive】Hive编程指南
- hive编程指南--hive基础知识
- Hive编程(影印版)
- 读hive编程指南
- Hive 高级编程
- Hive编程指南
- Hive的UDF编程
- Hive 函数高级编程
- Hive编程指南 读书笔记
- Hive UDF 编程
- <<Hive编程指南>>读书笔记
- hive maven 编程
- Hive中UDF编程
- Hive连接与编程
- Hive函数编程-逻辑运算
- hive之UDF编程
- Oracle中时间日期格式转换及常用日期函数
- 机器学习小试(8)使用TensorFlow跑通一个通用增量学习流程-增量学习
- C++中virtual的三种用法
- Sublime Text 3 简体中文汉化包使用方法
- 结构体(内存对齐)和共用体—C语言
- Hive编程(十)【调优】
- Java开发快递物流项目(4)
- 【异常】SparkSession执行action操作时java.lang.ClassNotFoundException: org.codehaus.commons.compiler.Unchecked
- 欢迎使用CSDN-markdown编辑器
- (安卓) 三级缓存具体逻辑(内存,磁盘{数据库},网络)
- linux下mysql开启远程访问权限 防火墙开放3306端口
- [bzoj3112][Zjoi2013]防守战线
- No module named 'spacy.en'
- Python垃圾回收机制