• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

hive调优记录

Sql admin 3周前 (07-27) 90次浏览 0个评论 扫描二维码

最近有场讲座是关于 hive 的一个培训,也去听了一下,其中的某些点还是自己的盲区,平时也没注意到这些地方的优化,这些还是比较重要的,特此记录一下。

并行优化

set hive.exec.parallel=true;    //开启任务并行执行

假设你有两个子查询然后需要 join 关联处理,并且两个子查询之间没有任何的关联,这个时候两个子查询可以并行执行,然后在 join 处理,可以加快代码的运行。

OOM 优化

hive 有的时候也会出现 OOM 的问题,这个还是比较复杂的,你要看是在 map 端还是 reduce 端出现的 OOM 问题,可以通过加大每个 map 的内存限制或者增加 reduce 的数量来一定程度上缓解,但是不一定绝对能解决。这个还是要看具体的情况。

数据倾斜优化

原因

A:key 分布不均匀

B:业务数据本身的特性

C:建表考虑不周全

D:某些 HQL 语句本身就存在数据倾斜

常见的触发语句有:

  1. JOIN
  2. GROUP BY
  3. COUNT DISTINCT

下面简单介绍一下常见的数据倾斜处理办法:

空值数据引发倾斜

解决方案 1:user_id 为空的不参与关联

select * from log a join user b on a.user_id is not null and a.user_id = b.user_id
union all
select * from log c where c.user_id is null;

解决方案 2:赋予空值新的 key 值

select * from log a left outer join user b on
case when a.user_id is null then concat('hive',rand()) else a.user_id end = b.user_id

大小表关联

注意:使用 map join 解决小表关联大表造成的数据倾斜问题。这个方法使用的频率很高。

map join 概念:将其中做连接的小表(全量数据)分发到所有 MapTask 端进行 Join,从 而避免了 reduceTask,前提要求是内存足以装下该全量数据

COUNT DISTINCT

这个在写 sql 的时候经常遇到

可以将其优化成两个查询

1、先 distinct  子查询

2、在进行 count 处理

以上这样的做法是避免只有一个 reduce 处理较慢的情况,这样如果的你的数据量很大,在只有一个 reduce 的情况下处理的速度是很慢的。

group by 优化

group by,使用 Hive 对数据做一些类型统计的时候遇到过某种类型的数据量特别多,而其他类型数据的数据量特别少。当按照类型进行 group by 的时候,会将相同的 group by 字段的 reduce 任务需要的数据拉取到同一个节点进行聚合,而当其中每一组的数据量过大时,会出现其他组的计算已经完成而这里还没计算完成,其他节点的一直等待这个节点的任务执行完成,所以会看到一直 map 100%  reduce 99%的情况。

解决方法:set hive.map.aggr=true

set hive.groupby.skewindata=true

原理:hive.map.aggr=true 这个配置项代表是否在 map 端进行聚合

hive.groupby.skwindata=true 当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明hive 调优记录
喜欢 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!