HIVE的基本使用05(HSQL调优)

本文介绍了HIVE SQL调优的各种方法,包括fetch任务转换、本地模式优化、join优化、mapjoin、group by负载均衡、count(distinct)优化、分区裁剪、动态分区调整、分桶设置、适当调整Map和Reduce数量、根据执行计划调优以及并行执行和JVM重用策略。通过这些技巧,可以显著提升HIVE查询效率。
摘要由CSDN通过智能技术生成

1.fetch抓取

select * from A;这种语句可以直接读取文件,不走MR程序会快很多;

不走MR程序的情况:

在hive-default.xml.template文件中hive.fetch.task.conversion默认是more,老版本hive默认是minimal,该属性修改为more以后,全局查找、字段查找、limit查找都不走mapreduce。

设置conversion参数后再执行sql:

hive (default)> set hive.fetch.task.conversion=none;

2.本地模式

适用于hive的输入量很少的情况,把数据集中到一台最近的机器上处理。小数据集优化效果明显;

开启本地模式:hive (default)> set hive.exec.mode.local.auto=true; 

执行SQL

关闭本地模式:hive (default)> set hive.exec.mode.local.auto=false; 

自适应开启本地模式:

set hive.exec.mode.local.auto=true;  //开启本地mr

//设置local mr的最大输入数据量,当输入数据量小于这个值时采用local  mr的方式,默认为134217728,即128M

set hive.exec.mode.local.auto.inputbytes.max=51234560;

//设置local mr的最大输入文件个数,当输入文件个数小于这个值时采用local mr的方式,默认为4

set hive.exec.mode.local.auto.input.files.max=10;

3.join

小表驱动大表原则;新版本hsql已经被优化;

原因:小表被加载进入内存,大表通过关联条件,跟小表对比;

新版本hive的优化,会通过类似于oracle的表分析数据,自己确定大表还是小表。

4.mapjoin

场景:某张表的某个分区的数据远远高于其他分区,发生数据倾斜;

在map端进行join操作:

首先是Task A,它是一个Local Task(在客户端本地执行的Task),负责扫描小表b的数据,将其转换成一个HashTable的数据结构,并写入本地的文件中,之后将该文件加载到DistributeCache中。

接下来是Task B,该任务是一个没有Reduce的MR,启动MapTasks扫描大表a,在Map阶段,根据a的每一条记录去和DistributeCache中b表对应的HashTable关联,并直接输出结果。

案例实操:

(1)开启Mapjoin功能

set hive.auto.convert.join = true; 默认为true

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值