Hive常用优化

今天和大家聊一下Hive SQL的优化方法。Hive的本质是MapReduce,所以hive sql优化的核心思想就是:MapReduce的优化!!!所以大家要对MapReduce流程以及原理有一定的了解。

常用的通用优化方法

1、抓取策略

    抓取策略下,hive中对某些情况的查询不需要使用MapReduce计算

    set hive.fetch.task.conversion = more(默认是开启的)

2、explain extended显示查询计划(下期详解)

3、并行计算 

    set hive.exec.parallel = true; 开启并行,开启后默认8个

    hive.exec.parallel.thread.number   设置并行个数

4、严格模式 (限制查询条件)

    set hive.mapred.mode = strict

    严格模式下对查询的限制:

    ①分区表必须添加where对分区字段的条件过滤

    ②order by语句必须包含limit输出限制

    ③限制执行笛卡尔积的查询

5、排序优化

    order by 是全排序,所有的数据都会由一个reduce来处理

    sort by 对于单个reduce的数据进行排序

    distribute by 分区排序,经常和sort by结合使用代替order by

    如下:distribute by column sort by column asc/desc

    cluster by 相当于sort by + distribute by,但是不能通过asc、desc来指定排序方式

    所以排序推荐sort by、distribute by

6、join优化

    ①小表在左边

    ②使用相同的连接键,即on条件中尽量使用相同key

    select * from table1 left join table2 on table1.key=table2.key

    ③在map端完成聚合,即map join (还有其他相关配置参数,感兴趣的可以自己查一下)

    手动:/*+mapjoin(smalltable) */ 放小表

    如:select /*+mapjoin(smalltable) */ smalltable.key,bigtable.value from smalltable join bigtable on smalltable.key=bigtable.key

    自动:set hive auto.convert.join = true

7、map端聚合 (还有相关配置参数)

    set hive.map.aggr = true 开启map端聚合

    hive.groupby.skewindata = true 优化数据倾斜,执行两次mr

8、合并小文件

    hive.merge.mapfile = true 是否合并map端输出文件

    hive.merge.reducefile = true 是否合并reduce端输出文件

    hive.merge.size.per.task=256*1000*1000 设置合并文件大小阈值,即超过256M的文件不合并

9、JVM重用

    适用于小文件个数多、task个数多的场景

    set mapred.job.reuse.jvm.num.tasks=n ;n为插槽个数

    缺点:设置开启后,task槽会一直占用资源,不论是否又task运行,知道任务执行完才会释放资源

 

最后强烈推荐到hive官网看官方文档!!!

Hive官网:https://cwiki.apache.org/confluence/display/Hive/LanguageManual


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值