Hive优化笔记(1 - 非数据倾斜)

本文详细介绍了Hive的多种优化技巧,包括列裁剪和分区裁剪以减少扫描量,谓词下推提升过滤效率,本地模式加速小数据量查询,启用并行执行、严格模式和Map端聚合优化MapReduce流程,调整mapper和reducer数量平衡负载,以及小文件合并、JVM重用、引擎选择和输出压缩等策略。通过这些方法,可以显著提高Hive查询性能。
摘要由CSDN通过智能技术生成

目录

列裁剪和分区裁剪

谓词下推

本地模式(local mode)

并行执行

严格模式

Map端聚合

调整mapper数

调整reducer数

小文件合并优化

设置jvm重用

引擎选择

输出结果压缩


最重要的:查看SQL的执行计划,优化业务逻辑
explain sql语句;

列裁剪和分区裁剪

列裁剪就是在查询时只读取需要的列,这样可以避免全列扫描
分区裁剪就是只读取需要的分区,这样可以避免全表扫描

谓词下推

其基本思想是将过滤表达式尽可能移动至靠近数据源的位置,以使真正执行时能直接跳过无关的数据。在HiveSQL中,就是将where谓词逻辑都尽可能提前执行

本地模式(local mode)

在数据量较小的情况下,hive本地模式可提高查询效率。

原因是一般情况下,hive查询是需要向类似yarn集群去申请执行资源,但对较小的数据集来说,为查询而 触发任务执行所消耗的时间 可能会比实际执行查询的要多的多,而本地模式可以在单台机器上处理所有的任务,这样执行的总时间可以明显被缩短。

-- 开启Hive的本地模式
set hive.exec.mode.local.auto=true;

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

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

-- 还有就是,job的reduce数必须为0或者1,才会真正使用本地模式

并行执行

Hive 会将一个查询转化成一个或者多个阶段。这样的阶段可以是 MapReduce 阶段、抽样阶段、合并阶段、 limit 阶段。默认情况下,Hive 一次只会执行一个阶段。不过,某个特定的 job 可能包含众多的阶段,最典型的就是多个子查询union all,而这些阶段可能并非完全互相依赖的,也就是说有些阶段是可以并行执行的,这样可能使得整个 job 的执行时间缩短。

-- 控制在同一个sql中的不同的job是否可以同时运行。默认是False
set hive.exec.parallel=true;

-- 同一个sql允许并行任务的最大线程数。默认是8
set hive.exec.parallel.thread.number=16;

-- 单个任务并发的最大reduce数,0或负数没有限制。默认是0
set mapreduce.job.running.reduce.limit = 800;

-- 单个任务并发的最大map数,0或负数没有限制。默认是0
set mapreduce.job.running.map.limit = 1000;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值