提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、什么是HIVE数据倾斜?
  • 二、数据倾斜原因及解决办法
    • 1. Join 倾斜
      • a. 大表 Join 小表
      • b. 大表 Join 大表
    • 2. Group by 倾斜
    • 3. Count distinct 倾斜
  • 总结

#博学谷IT学习技术支持#

前言

HIVE数据倾斜是HIVE必备、必问知识点。了解什么是数据倾斜、倾斜的原因以及如何解决倾斜,非常有必要。以下是个人总结。


一、什么是HIVE数据倾斜?

HIVE处理的数据分布不均匀,导致某一个或几个节点处理的数据量巨大,就会造成数据倾斜。
具体表现是,整个任务进度长时间处于99%附近,在yarn的任务详情页面发现大部分reduce都运行完成,只有一个或者几个reduce任务在长时间执行,是由于该reduce任务处理的数据量远远大于其他任务。

二、数据倾斜原因及解决办法

在实际项目中,主要三种情况会遇到数据倾斜,分别是join操作、group by 操作和count distinct 操作。

1. Join 倾斜

a. 大表 Join 小表

  • 倾斜原因:主要是热点key导致,在shuffle过程中,相同的key会基于hash分发到同一个reduce算子上,导致join时倾斜。
  • 解决办法:开启map端join: set hive.auto.convert.join = true; 默认是打开的。
    – 开启该设置后,join时会在map端将小表缓存到内存中(缓存为hash table),在map端执行join。
    – 小表默认是 1000行或者25Mb大小。可以通过设置参数提高小表的阈值 : set hive.mapjoin.smalltable.filesize=25000000;

b. 大表 Join 大表

  • 倾斜原因:跟大表Join小表倾斜原因差不多,存在热点key,或者大量无用的空key,导致倾斜。
  • 解决办法:
    – 运行时优化:采用skewjoin(倾斜关联)开启对倾斜数据join的优化: set hive.optimize.skewjoin=true; ,然后可以设置join倾斜阈值: set hive.skewjoin.key=100000; ,当join的key对应的记录条数超过100000,就认为这个key发生了数据倾斜,会对其分拆优化。
    – 编译时优化:通过设置: set hive.optimize.skewjoin.compiletime=true; 可以在编译SQL时将执行计划优化完成。但是,这个需要在建表时指定数据倾斜元数据信息。
    – 一般情况下,运行时优化和编译时优化都同时开启,并且要开启union优化: set hive.optimize.union.remove=true;
    – 除了以上三个参数外,还可以 * 通过子查询剔除空key 空key转为随机字符串 * 、* 大表拆分为小表分别join再union * 等方式进行优化。

2. Group by 倾斜

  • 倾斜原因:默认情况下,map阶段相同的key会分发到同一个reduce端聚合,热点key导致group by 聚合倾斜。
  • 解决办法:
    – 开启 map 端聚合: set hive.map.aggr = true; ,默认开启。这个设置会提前在map端聚合,减少数据传输及在reduce阶段的处理时间。通过 set hive.groupby.mapaggr.checkinterval = 100000; 设置在map端聚合操作的条数。当大于该值时,才会进行map端聚合。
    – 开启负载均衡: set hive.groupby.skewindata = true; ,该设置会在数据出现倾斜时,将一个group by 的执行计划拆分为两个阶段MR,第一阶段将key随机分发到不同reduce进行聚合,然后第二阶段MR会基于前一阶段预处理的结果,将相同的key分发到同一个reduce算子,执行聚合操作。

3. Count distinct 倾斜

  • 倾斜原因:所有key会分发到同一个reduce进行去重统计个数,数据量较大时导致运行时间过长。
  • 解决办法:将 count distinct 改写为 group by 的写法。目的是增加一个MR的操作。
 select count(distinct id) from table; 改写为:select count(t1.id) from (select id from table group by id) t1;

总结

以上就是个人对HIVE数据倾斜的简单的介绍及解决办法的探讨,请批评指正,谢谢!

【HIVE数据倾斜常见解决办法】相关推荐

  1. hive数据倾斜的解决办法

    数据倾斜是进行大数据计算时常见的问题.主要分为map端倾斜和reduce端倾斜,map端倾斜主要是因为输入文件大小不均匀导致,reduce端主要是partition不均匀导致. 在hive中遇到数据倾 ...

  2. hive解决数据倾斜问题_Hive数据倾斜和解决办法

    转自:https://blog.csdn.net/xinzhi8/article/details/71455883 操作: 关键词 情形 后果 Join 其中一个表较小,但是key集中 分发到某一个或 ...

  3. Hadoop数据倾斜及解决办法

    数据倾斜:就是大量的相同key被partition分配到一个分区里,map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间 ...

  4. hive数据倾斜及处理案例

    什么是数据倾斜 数据倾斜其实是进行分布式计算的时候,某些节点的计算能力比较强或者需要计算的数据比较少,早早执行完了,某些节点计算的能力较差或者由于此节点需要计算的数据比较多,导致出现其他节点的redu ...

  5. Hive 数据倾斜问题定位排查及解决(实战)

    多数介绍数据倾斜的文章都是以大篇幅的理论为主,并没有给出具体的数据倾斜案例.当工作中遇到了倾斜问题,这些理论很难直接应用,导致我们面对倾斜时还是不知所措. 今天我们不扯大篇理论,直接以例子来实践,排查 ...

  6. Hive数据倾斜解决方法总结

    Hive数据倾斜解决方法总结 参考文章: (1)Hive数据倾斜解决方法总结 (2)https://www.cnblogs.com/kongcong/p/7777092.html 备忘一下.

  7. Hive 数据倾斜问题定位排查及解决(实际案例)

    多数介绍数据倾斜的文章都是以大篇幅的理论为主,并没有给出具体的数据倾斜案例.当工作中遇到了倾斜问题,这些理论很难直接应用,导致我们面对倾斜时还是不知所措. 今天我们不扯大篇理论,直接以例子来实践,排查 ...

  8. HIVE 数据倾斜浅谈

    HIVE 数据倾斜浅谈 一.数据倾斜现象   map100%,reduce一直卡在一个值,如99%. 二.数据倾斜的原因   数据按key的hash值分配到reduce中,如果有的key值比较集中,就 ...

  9. Hive数据倾斜及处理

    数据倾斜的直白概念: 数据倾斜就是数据的分布不平衡,某些地方特别多,某些地方又特别少,导致的在处理数据的时候,有些很快就处理完了,而有些又迟迟未能处理完,导致整体任务最终迟迟无法完成,这种现象就是数据 ...

最新文章

  1. 1810: Huffuman树(vector模拟)
  2. Python 异常处理-Python零基础入门教程
  3. mysql 创建视图 主键_MySQL数据库基础操作命令,本文助你更上一层楼!
  4. win32开发(图形绘制)
  5. oracle+dblink不管用,oracle dblink问题
  6. 网页设计中最常用的字体
  7. recyclerView 列表类控件卡顿优化
  8. 未检测任何音频设备,关机假死
  9. tpac100控制器设置教程_TP-link AC100控制器配置基础教程
  10. 如何恢复误删SD卡文件?SD卡误删除数据恢复
  11. html用户名和用户密码验证,js实现用户名和密码的校验
  12. 常见的几种加密方法和实现
  13. iTween基础之Move(移动)
  14. Ubuntu系统升级后无法进入系统
  15. 修复压缩文件提示:现校验和错误。该文件已损坏
  16. Python爬虫之知乎采集工具
  17. 大数据助力智慧物流,新一代物流产业数据价值分析
  18. 租房信息采集并做数据分析
  19. PAT (Advanced Level) Practice A1090 Highest Price in Supply Chain (25 分)(C++)(甲级)(树,深度)
  20. c语言指针与一维数组PPT,C语言第5章指针和一维数组.ppt

热门文章

  1. 数据库---MariaDB(MySQL)
  2. こっそり==そっくり==たっぷり==5分钟--完全掌握6个日语N2常考副词。---路得老师学日语...
  3. Python实现网络聊天室(支持多人聊天与私聊)
  4. 【环境搭建】WAMP环境+DVWA漏洞测试平台搭建过程
  5. Android 调试您的应用
  6. Flutter学习笔记-主轴与交叉轴的对其方式
  7. 全国一级计算机考证报名网站
  8. leetcode 19. 删除链表的倒数第 N 个结点(双指针应用)
  9. 8000字解读蕉下:拿什么打破新消费亏钱魔咒?
  10. 图书管理系统——读者管理(查询功能)