hive-12 hive常用的调优方案

本文详细介绍Hive的性能调优策略,包括Fetch抓取、本地模式、表优化、join调优、groupby调优、count调优、避免笛卡尔积、数据过滤、并行执行、严格模式、JVM重用、推测执行、压缩、数据倾斜处理等。通过合理设置Map数和Reduce数,提升Hive查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Fetch抓取(走集群,不走MR)

  • Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算

    • 例如:select * from score;
    • 在这种情况下,Hive可以简单地读取employee对应的存储目录下的文件,然后输出查询结果到控制台
  • 在hive-default.xml.template文件中 hive.fetch.task.conversion默认是more,老版本hive默认是minimal,该属性修改为more以后,在全局查找、字段查找、limit查找等都不走mapreduce。

示例

  • 把 hive.fetch.task.conversion设置成**none**,然后执行查询语句,都会执行mapreduce程序

    set hive.fetch.task.conversion=none;
    select * from score;
    select s_id from score;
    select s_id from score limit 3;
    
  • 把hive.fetch.task.conversion设置成==more==,然后执行查询语句,如下查询方式都不会执行mapreduce程序。

    set hive.fetch.task.conversion=more;
    select * from score;
    select s_id from score;
    select s_id from score limit 3;
    

本地模式

  • 在Hive客户端测试时,默认情况下是启用hadoop的job模式,把任务提交到集群中运行,这样会导致计算非常缓慢;

  • Hive可以通过本地模式在单台机器上处理任务。对于小数据集,执行时间可以明显被缩短。

示例

--开启本地模式,并执行查询语句
set hive.exec.mode.local.auto=true;  //开启本地mr

--设置local mr的最大输入数据量,当输入数据量小于这个值时采用local  mr的方式,
--默认为134217728,即128M
set hive.exec.mode.local.auto.inputbytes.max=50000000;

--设置local mr的最大输入文件个数,当输入文件个数小于这个值时采用local mr的方式,
--默认为4
set hive.exec.mode.local.auto.input.files.max=5;


--执行查询的sql语句
select * from student cluster by s_id;
--关闭本地运行模式
set hive.exec.mode.local.auto=false;
select * from student cluster by s_id;

表的优化

join调优

参考之前的:join的优化

group by调优

参考之前的:group by 优化

count调优

通过增加一个Job的方式调高效率,数据量大是划算。

  • 数据量小的时候无所谓,数据量大的情况下,由于count distinct 操作需要用一个reduce Task来完成,这一个Reduce需要处理的数据量太大,就会导致整个Job很难完成,
  • 一般count distinct使用先group by 再count的方式替换
# 每个reduce任务处理的数据量 默认256000000(256M)
 set hive.exec.reducers.bytes.per.reducer=32123456;
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值