0x00 前言
数据倾斜是大数据领域绕不开的拦路虎,当你所需处理的数据量到达了上亿甚至是千亿条的时候,数据倾斜将是横在你面前一道巨大的坎。
迈的过去,将会海阔天空!迈不过去,就要做好准备:很可能有几周甚至几月都要头疼于数据倾斜导致的各类诡异的问题。
郑重声明:
- 话题比较大,技术要求也比较高,笔者尽最大的能力来写出自己的理解,写的不对和不好的地方大家一起交流。
- 有些例子不是特别严谨,一些小细节对文章理解没有影响,不要太在意。(比如我在算机器内存的时候,就不把Hadoop自身的进程算到使用内存中)
- 总的来讲个人感觉写的还是比较干货的。
文章结构
- 先大致解释一下什么是数据倾斜
- 再根据几个场景来描述一下数据倾斜产生的情况
- 详细分析一下在Hadoop和Spark中产生数据倾斜的原因
- 如何解决(优化)数据倾斜问题?
0x01 什么是数据倾斜
简单的讲,数据倾斜就是我们在计算数据的时候,数据的分散度不够,导致大量的数据集中到了一台或者几台机器上计算,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。
一、关键字:数据倾斜
相信大部分做数据的童鞋们都会遇到数据倾斜,数据倾斜会发生在数据开发的各个环节中,比如:
- 用Hive算数据的时候reduce阶段卡在99.99%
- 用SparkStreaming做实时算法时候,一直会有executor出现OOM的错误,但是其余的executor内存使用率却很低。
这些问题经常会困扰我们,辛辛苦苦等了几个小时的数据就是跑不出来,心里多难过啊。
例子很多,这里先随便举两个,后文会详细的说明。
二、关键字:千亿级
为什么要突出这么大数据量?先说一下笔者自己最初对数据量的理解:
数据量大就了不起了?数据量少,机器也少,计算能力也是有限的,因此难度也是一样的。凭什么数据量大就会有数据倾斜,数据量小就没有?
这样理解也有道理,但