当前位置: 首页 > news >正文

Hive中的数据倾斜优化

数据倾斜

  • 一.概述
      • 何为数据倾斜
      • 导致的问题
  • 二.优化
      • group by 数据倾斜
      • join 数据倾斜

一.概述

何为数据倾斜

运行的过程当中,有多个Reduce,每个Reduce拿到的数据不均匀,其中有一个或几个拿到的数据远远大于其他reduce拿到的数量,此时任务出现了数据倾斜;

导致的问题

  1. 执行效率下降(整个reduce时间,就看最后一个reduce结束时间);
  2. 由于reduce长时间运行不完,导致资源长期被占用,一旦超时,YARN会强制回收资源,导致运行失败
  3. 导致节点宕机

二.优化

group by 数据倾斜

  • 方案一:Combiner预聚合
    一个MR,在【每一个MapTask】使用Combiner预聚合,将聚合之后的结果发往Reduce,这样在Reduce接收到的数据就少了,从而解决数据倾斜;

    配置:
    在这里插入图片描述
    开启map端提前聚合 ;

  • 方案二: 负载均衡(大Combinerskew
    采用两个MR来解决,
    第一次MR负责将数据均匀落在不同的reduce上进行聚合统计,形成一个局部的结果;
    第二个MR,读取第一个MR的局部结果,按照相同的key发往同一个reduce,完成统计;

    配置:
    在这里插入图片描述
    注意:
    当使用负载均衡时间,不支持在多列上去重,会报错;

join 数据倾斜

  • 方案一Map joinBucket map joinSMB map join
    将ruduce端的join操作移到到【MapTask的内存】,直接将倾斜排除,因为map一般不会有数据倾斜问题,map是根据切片来读取文件,切片block(128mb) 是均匀切的

    但是三种map join都需要满足相关条件,如分桶的数量要整数倍/相同,分桶字段相同;但是很多时候不满足这些条件!

    注意:在map join之前,还有两个通用方法
    ①筛选掉无用字段
    ②null值太多时将其随机赋值打散,以免数据倾斜;

  • 方案二: 在Reduce端解决(无条件) skew join
    建议开启 union优化,以减少二次读写,减少union输出的额外扫描;整体效率更高;

    思路
    将容易产生倾斜的key的值从整个环境中排除掉,将倾斜的数据单独找一个MR来处理,,算完后返回结果;
    如何知道哪个值导致的倾斜?
    ①编译(建表)期解决明确知道key值的倾斜问题时
    明确知道key值有倾斜问题,一般采用编译器解决,在建表的时候,提前设置好对应值有倾斜即可,执行时,hive会将这些倾斜的key从这个MR排除,单独找一个MR来处理; 最后底层用union all合并;
    在这里插入图片描述

    运行期解决**(当不知道哪个key导致倾斜时设定阀值动态检测
    执行时,hive会记录每个key出现的次数,当key的次数达到特定的阀值,就认为key导致数据倾斜,将key的数据排除掉,单独用MR去处理;最后底层用union all合并;
    在这里插入图片描述
    一般设置阀值为平均key个数的3~10倍,认为会产生数据倾斜;

相关文章:

  • SpringMvc(二、请求传参
  • [如何编译openGauss对应版本的wal2json.so]
  • 计算方法/数值分析 期末复习整理
  • makefile(详细讲解)
  • Java递归实现迷宫问题和八皇后
  • 软件测试面试题及答案,2022最强版
  • 2.采药-01背包
  • 语法基础(函数)
  • 这几个小插件助你快速提升工作效率
  • Java毕业设计-校园活动赞助与宣传管理系统
  • APS智能排产帮助企业做好生产管理
  • 基于数字孪生的管道数字化平台建设要点
  • Ubuntu系统下安装OpenCV,pytorch,TensorFlow教程
  • shell脚本之数组
  • 智能人体存在感知方案,毫米波雷达感应器成品,智能化感知联动应用
  • 【刷算法】求1+2+3+...+n
  • bootstrap创建登录注册页面
  • Median of Two Sorted Arrays
  • MySQL用户中的%到底包不包括localhost?
  • scrapy学习之路4(itemloder的使用)
  • uni-app项目数字滚动
  • 从0到1:PostCSS 插件开发最佳实践
  • 如何用vue打造一个移动端音乐播放器
  • 学习JavaScript数据结构与算法 — 树
  • 7行Python代码的人脸识别
  • postgresql行列转换函数
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 如何在招聘中考核.NET架构师
  • #Java第九次作业--输入输出流和文件操作
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (BFS)hdoj2377-Bus Pass
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (一)80c52学习之旅-起始篇
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)基于IDEA的JAVA基础12
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)nsfocus-绿盟科技笔试题目
  • (转)平衡树
  • ***原理与防范
  • **CI中自动类加载的用法总结
  • .Net CF下精确的计时器
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net core 依赖注入的基本用发
  • .Net MVC + EF搭建学生管理系统
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换