大数据数据倾斜问题

2023-11-11

数据倾斜


数据倾斜是我们在处理大数据量问题时绕不过去的问题,也是在面试中几乎必问的考点。正常的数据分布理论上都是倾斜的,就是我们所说的'二八原理':80%的财富集中在20%的人手中, 80%的用户只使用20%的功能 , 20%的用户贡献了80%的访问量。简单来说数据倾斜就是数据的key 的分化严重不均,造成一部分数据很多,一部分数据很少的局面。

表现


相信大部分做数据的童鞋们都会遇到数据倾斜,数据倾斜会发生在数据开发的各个环节中,比如:用Hive算数据的时候reduce阶段卡在99.99%用SparkStreaming做实时算法时候,一直会有executor出现OOM的错误,但是其余的executor内存使用率却很低。

Hadoop


当我们看任务进度长时间维持在99%,这里如果详细的看日志或者和监控界面的话会发现:

有一个多几个reduce卡住
各种container报错OOM
读写的数据量极大,至少远远超过其它正常的reduce
伴随着数据倾斜,会出现任务被kill等各种诡异的表现


Spark


Spark中的数据倾斜也很常见,Spark中一个 stage 的执行时间受限于最后那个执行完的 task,因此运行缓慢的任务会拖累整个程序的运行速度。过多的数据在同一个task中执行,将会把executor撑爆,造成OOM,程序终止运行。

Flink


使用Window、GroupBy、Distinct等聚合函数时,频繁出现反压,消费速度很慢,个别的task会出现OOM,调大资源也无济于事。

数据倾斜原理和解决方案
在做数据运算的时候会设计到,countdistinct、group by、join等操作,都会触发Shuffle动作。一旦触发,所有相同 key 的值就会拉到一个或几个节点上,发生单点问题。

一个简单的场景,在订单表中,北京和上海两个地区的订单数量比其他地区高几个数量级。那么进行聚合的时候就会出现数据热点。

解决数据倾斜的几个思路:

业务上:避免热点key的设计或者打散热点key,例如可以把北京和上海分成地区,然后单独汇总。
技术上:在热点出现时,需要调整方案避免直接进行聚合,可以借助框架本身的能力,例如进行mapside-join。
参数上:无论是Hadoop、Spark还是Flink都提供了大量的参数可以调整。


Hadoop/Hive参数


mapside-join
对于group by或distinct,设定 hive.groupby.skewindata=true
合并小文件
压缩文件


Spark 参数


使用map join 代替reduce join
提高shuffle并行度


Flink 参数


MiniBatch设置
并行度设置
其他更多的是在业务上的key设计来避免。如何处理数据倾斜是一个长期的过程,希望本文的一些思路能提供帮助。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据数据倾斜问题 的相关文章

  • PRD 使用Pentaho Metadata Editor(PME)生成的metadata做数据源(5)

    使用Pentaho Metadata Editor PME 生成的metadata做数据源 Pentaho Report Designer PRD 可以支持多种数据源输入方式 Pentaho Metadata Editor作为自家平台中的一
  • GBDT去预测时序数据

    最近有一个需求 需要用到GBDT算法去实现对时序数据进行预测 回归任务 数据是从2011年1月到2020年4月份6个不同城市的房地产交易数据 由于在网上没有找到对应的基于时序数据来用GBDT算法的博客或者资料 我也去github上面找个 出

随机推荐

  • 组装数组对象

    1 创建数组let arryList 2 创建数组内的元素 JSON对象 let item 3 给元素赋值item value1 num1 item value2 num2 4 把元素放入数组arryList push item 5 多元素
  • linux中的9个权限位

    首先 我们通过linux的ls命令操作获得每个文件的权限 如下图 1 表示连接的文件数 admin 表示用户 admin表示用户所在的组 5572 表示文件大小 字节 Feb 20 11 43 表示最后修改日期 2 20 表示文件名 由上图
  • Python爬虫获取10页的图片、文本数据并传入linux上的mysql数据库中

    一 任务需求 爬取网址之家的网站排行信息 共获取6个指标 2张图片和4个文本字符串 观察发现每个网页共30个 一共需要爬取10页 并把图片存入PNG目录下 文本信息存入info txt文件中 最后上传到linux上的Mysql数据库中 二
  • SpringBoot+mybatisPlus + dynamic-datasource实现真正的动态切换数据源(附核心代码)

    文章目录 前言 创建主库 生成mapper等代码 定义新数据源 创建初始化runner类 创建Mybatis配置类 拦截器实现动态切换 前言 系统要调整为S A S S版实现多 租 户功能 首先想到的两个解决方案就是 1 通过表字段隔离租户
  • 大数据可视化界面截图(三)

    电商销售 购买力 舆情 集团数据 品牌电商
  • Vijava 学习笔记之(VirtualMachine 更改虚拟机系统磁盘大小)

    源代码 package com vmware client import com vmware util Session import com vmware vim25 import com vmware vim25 mo Created
  • Tomcat打破双亲委派

    复习复习JVM类加载机制 再谈谈 Tomcat 的类加载器如何打破 Java 的双亲委托机制 JVM 的类加载器 Java 的类加载 就是把字节码格式 class 文件加载到 JVM 的方法区 并在 JVM 的堆区建立一个java lang
  • 阿里云服务器使用记录

    阿里云服务器SSH连接 1 登录打开个人ECS实例 2 确认服务器密码 3 选择VNC连接登录 3 1 注意保存连接密码 或者修改为个人密码 3 2 登录修改文件 vim etc ssh sshd config PermitRootLogi
  • 区块链包含术语概念【27术语整理汇总】

    问题导读1 区块链包含哪些概念 2 什么是工作量证明 3 什么是共识机制 4 你认为哪些概念比较重要 区块链现在很多人都在学习 无论是看书籍 还是看视频 我们有时候并不是明白讲的是什么 比如工作量证明 共识机制等等 所以这里补充下概念 由于
  • 导读:生活中的设计模式——启程之前,请不要错过我

    为什么叫设计模式 什么是设计模式 设计模式与生活有什么联系 为什么要学设计模式 如何进行学习 为什么选择 Python 弥补市场空缺 大势所趋 Python 已然成风 简单的 Python 基础 Python 的特点 基本语法 常用容器 L
  • zabbix 监控硬件

    之前介绍的zabbix监控都是属于监控服务方面 现在介绍一下zabbix监控服务器硬件信息的 本文出自 吟 技术交流 博客http dl528888 blog 51cto com 2382721 1403893 之前介绍的zabbix监控都
  • POJ-2676 Sudoku(简单数独-dfs深搜)

    Sudoku Time Limit 2000MS Memory Limit 65536K 题目链接http poj org problem id 2676 Description Sudoku is a very simple task A
  • Ubuntu: Docker安装与操作

    在进行docker安装前 我们首先得有以下工具 xshell FileZilla Client Xshell下载安装教程 FileZilla Client下载安装教程 如果你的Ubuntu是纯净的 也就是说刚下好并且刚用虚拟机装好的 你得先
  • 渗透测试用工具(三)layer子域名挖掘机

    一 为什么要搜集子域名 收集网站信息的时候子域名收集是非常重要的一部分 通常在一个主站进行防护完善的情况下找不到渗透点的话 我们可以考虑在子站点进行渗透爆破 通过旁站C段进行渗透 子域名收集是渗透测试中 前期信息收集必不可少的一个阶段 域名
  • gstreamer简介--TX2打开摄像头失败解决

    参考链接 https blog csdn net tx3344 article details 7497434 https blog csdn net Tosonw article details 104199195 这两篇都是gstrea
  • 将IdeaVim与IntelliJ一起使用

    我已经成为VIM用户几年了 并且还在IntelliJ中使用IdeaVim插件 以下配置和功能对我有很大帮助 您可以在 ideavimrc文件中配置与常规VIM中相同的键 ideavimrc 设置idearefactormode keep可以
  • “QtCore/qglobal.h”: No such file or directory错误的解决

    QtCore qglobal h No such file or directory错误的解决
  • java8 StreamAPI串行流和并行流

    串行流与并行流 创建一个1 10的list List
  • 信息泄露-小白初识

    生活在网络化 信息化的今天 我们时不时的会听到某某国家 某某网站泄露了多少亿的用户数据 这些数据包括个人的姓名 联系电话 家庭住址 甚至更恶劣的包括个人银行卡账号 宾馆以及网购记录等 如此高速的网络让我们享受到了便利 恐怖的数据泄露事件却另
  • 大数据数据倾斜问题

    数据倾斜 数据倾斜是我们在处理大数据量问题时绕不过去的问题 也是在面试中几乎必问的考点 正常的数据分布理论上都是倾斜的 就是我们所说的 二八原理 80 的财富集中在20 的人手中 80 的用户只使用20 的功能 20 的用户贡献了80 的访