一次Hive调优案例

一次Hive调优案例

一、问题引出

上游一张di表,日增数据量60GB,历史数据总量25TB。需求是从中抽取某筛选条件下的数据,并建立一张da表。

SQL如下:

select *
from t
where pt <= '${-1d_pt}'

每天凌晨运行该任务,运行时长约1小时,影响下游数据产出及时性。

二、问题分析

1.基础日志

观察日志,发现map task数量有3w+

在这里插入图片描述

2. tez-ui

观察tez-ui,发现在merge阶段,耗时约40min,主要耗时发生在merge阶段。推测map任务处理小文件过多,导致merge任务过重。

在这里插入图片描述
在这里插入图片描述

三、问题解决

1. 参数调优

set hive.tez.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; --HiveInputFormat换成CombineHiveInputFormat,将多个小文件打包成一个InputSplit提供给一个Map处理,避免因为大量小文件问题,启动大量任务。
set mapreduce.input.fileinputformat.split.minsize = 256000000;  -- 每个Map最小输入大小
set mapreduce.input.fileinputformat.split.maxsize = 512000000;  -- 每个Map最大输入大小
set hive.exec.parallel=true; --设置hive并发执行

首先进行map端小文件合并,将多个小文件打包成一个InputSplit提供给一个Map处理,避免因为大量小文件问题,启动大量任务。

然后控制每个map task处理的数据量,减少map task的数量。并设置hive并发执行。

经测试,加入以上参数后,任务运行时长可减少2/3以上。

2. 数据合并

由于是日志数据,可以将-2d的da数据,union上-1d的di,来获取-1d的da数据。SQL如下

select *
from t_da
where pt = '${-2d_pt}'
union all
select *
from t_di
where pt = '${-1d_pt}'

四、总结

以上为本次hive调优案例的处理过程。hive调优要求我们对hive、mapreduce执行原理较为熟悉,通过观察日志、执行DAG等信息,对症下药,方可获得较好的调优效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值