您的位置:首页 > 其它

1007-Hive性能调优

2015-11-25 11:14 344 查看
1、什么时候可以避免执行MapReduce?

select * or select field1,field2

limite 10

where语句中只有分区字段

使用本地set hive.exec.mode.local.auto=true;

1.1 分区表结构
hive (mydb)> desc access_log;

OK

col_name data_type comment

uid int None

ip string None

url string None

day string None

prov string None



# Partition Information

# col_name data_type comment



day string None

prov string None

1.2 验证 select * or select field1,field2 不走MR

hive (mydb)> select * from access_log where prov="hebei";

OK

uid ip url day prov

700 192.168.2.25 http://www.baidu1.com 20150726 hebei

800 192.168.2.25 http://www.baidu1.com 20150726 hebei

900 192.168.2.26 http://www.baidu1.com 20150726 hebei

hive (mydb)> select * from access_log;

OK

uid ip url day prov

100 192.168.2.20 http://www.baidu1.com 20150726 beijing

200 192.168.2.21 http://www.baidu2.com 20150726 beijing

300 192.168.2.22 http://www.baidu2.com 20150726 beijing

400 192.168.2.23 http://www.baidu3.com 20150726 beijing

500 192.168.2.24 http://www.baidu.com 20150726 beijing

600 192.168.2.24 http://www.baidu.com 20150726 beijing

700 192.168.2.25 http://www.baidu1.com 20150726 hebei

800 192.168.2.25 http://www.baidu1.com 20150726 hebei

900 192.168.2.26 http://www.baidu1.com 20150726 hebei

1.3 验证limit不走MR

hive (mydb)> select * from access_log limit 2;

OK

uid ip url day prov

100 192.168.2.20 http://www.baidu1.com 20150726 beijing

200 192.168.2.21 http://www.baidu2.com 20150726 beijing

2、group by语句:

通常和聚合函数一起使用,按照一个或者多个列对结果进行分组,然后对每组执行聚合操作

3、having语句:

限制结果的输出

4、hive将查询转化为MapReduce执行,hive的优化可以转化为mapreduce的优化!

5、hive是如何将查询转化为MapReduce的?

6、EXPLAIN的使用

hive对sql的查询计划信息解析

EXPLAIN SELECT COUNT(1) FROM T1;

EXPLAIN EXTENDED

显示详细扩展查询计划信息

7、本地mr
使用场景: 一般针对小数据开发测试的时候,我们常常设置本地模式,这样可以提高本地开发的效率。
主要的原因: 主要提高本机的CPU,内存利用率。

本地模式设置方式:

set mapred.job.tracker=local;

set hive.exec.mode.local.auto=true;

测试 select uid,ip,url from access_log;

主要默认情况下max 比较有限,很需要注意设置max=128M

下面两个参数是local mr中常用的控制参数:

1)hive.exec.mode.local.auto.inputbytes.max默认134217728

设置local mr的最大输入数据量,当输入数据量小于这个值的时候会采用local mr的方式。如果超出改数量就会变成服务端的MR

2)hive.exec.mode.local.auto.input.files.max默认是4

设置local mr的最大输入文件个数,当输入文件个数小于这个值的时候会采用local mr的方式

8、并行计算
当处理文件时候,分成多个阶段执行,那么我们开启并行计算

开启并行计算,增加集群的利用率

set hive.exec.parallel=true

9、设置严格模式

set hive.mapred.mode=strict | nostrict;

strict可以禁止三种类型的查询:

一、强制分区表的where条件过滤: 即对于分区表,必须设置strict,主要目的防止全部查询表数据

二、Order by语句必须使用limit

三、限制笛卡尔积查询

10、调整mapper和reducer的数量
太多map导致启动产生过多开销

按照输入数据量大小确定reducer数目,

set mapred.reduce.tasks= 默认3
dfs -count /分区目录/*
hive.exec.reducers.max设置阻止资源过度消耗

11、JVM重用

小文件多或task多的业务场景

set mapred.job.reuse.jvm.num.task=10

会一直占用task槽

12、排序语句
order by 语句: 是全局排序
sort by 语句: 是单reduce排序

distribute by语句: 是分区字段排序;

cluster by语句:

可以确保类似的数据的分发到同一个reduce task中,并且保证数据有序防止所有的数据分发到同一个reduce上,导致整体的job时间延长

cluster by语句的等价语句:

distribute by Word sort by Word ASC

select * from access_log order by uid desc limit 4;

select * from access_log sort by uid desc limit 4;

select * from access_log distribute by prov sort by prov limit 4;
<=>select * from access_log cluster by prov limit 4;

13、Map-side聚合

set hive.map.aggr=true;

这个设置可以将顶层的聚合操作放在Map阶段执行,从而减轻清洗阶段数据传输和Reduce阶段的执行时间,提升总体性能。实际上就是MapReduce中CombinerFileInputFormat ,需要查看MapReduce的源码看

缺点:该设置会消耗更多的内存。

执行select count(1) from wlan;

(1) 什么叫数据倾斜?
K值不均分配,会导致数据倾斜,一般会发生在reduce端,可以通过在map端设置就可以防止数据倾斜。
(2)如何导致的数据倾斜
K值出现空值
(3) 如何防止数据倾斜
14、jion优化
1、驱动表最右边

1.1 查询表表的大小从左边到右边依次增大
2、标志机制
2.1 显示的告知查询优化器哪张表示大表

2.2 /*+streamtable(table_name)*/
15、表连接 (只支持等值连接)
(1) INNER JOIN

两张表中都有,且两表符合连接条件

select t1.name,t1.age,t9.age from t9 join t1 on t1.name=t9.name;

(2)LEFT OUTER JOIN

左表中符合where条件出现,右表可以为空

(3)RIGHT OUTER JOIN

右表中符合where条件出现,左表可以为空

(4)FULL OUTER JOIN

返回所有表符合where条件的所有记录,没有NULL替代

(5)LEFT SEMI-JOIN

左表中符合右表on条件出现,右表不出现

(6)select t1.name,t1.age from t9 LEFT SEMI JOIN t1 on t1.name=t9.name;

(7)笛卡尔积

是m x n的结果

(8)map-side JOIN

只有一张小表,在mapper的时候将小表完全放在内存中

select /*+ mapjoin(t9) */t1.name,t1.age from t9 JOIN t1on t1.name=t9.name;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: