0x00 媒介
数据倾斜是大年夜数据范畴绕不开的拦路虎,当你所需处理的数据量达到了上亿甚至是千亿条的时刻,数据倾斜将是横在你面前一道巨大年夜的坎。
迈的以前,将会放言高论!迈不以前,就要做好预备:很可能有几周甚至几月都要头疼于数据倾斜导致的各类诡异的问题。
文┞仿构造
- 先大年夜致解释一下什么是数据倾斜
- 再根据几个场景来描述一下数据倾斜产生的情况
- 具体分析一下在Hadoop和Spark中产生数据倾斜的原因
- 若何解决(优化)数据倾斜问题?
简单的讲,数据倾斜就是我们在计算数据的时刻,数据的分散度不敷,导致大年夜量的数据集中到了一台或者几台机械上计算,这些数据的计算速度远远低于平均计算速度,导致全部计算过程过慢。
一、关键字:数据倾斜
信赖大年夜部分做数据的童鞋们都邑碰到数据倾斜,数据倾斜会产生在数据开辟的各个环节中,比如:
- 用 Hive 算数据的时刻 reduce 阶段卡在 99.99%
- 用 Spark Streaming 做及时算法时刻,一向会有 executor 出现 OOM 的缺点,然则其余的 executor 内存应用率却很低。
这些问题经常会困扰我们,辛辛苦苦等了几个小时的数据就是跑不出来,心里多灾过啊。
例子很多,这里先随便举两个,后文会具体的解释。
二、关键字:千亿级
为什么要凸起这么大年夜数据量?先说一下笔者本身最初对数据量的懂得:
数据量大年夜就了不得了?数据量少,机械也少,计算才能也是有限的,是以难度也是一样的。凭什么数据量大年夜就会稀有据倾斜,数据量小就没有?
公司一的数据分时童鞋在做 join 的时刻产生了数据倾斜,会导致有几百万用户的相干数据集中到了一台办事器上,几百万的用户数据,说大年夜也不大年夜,正常字段量的数据的话 64G 照样能轻松处理掉落的。
公司二的数据分时童鞋在做 join的时刻也产生了数据倾斜,可能会有 1 亿的用户相干数据集中到了一台机械上了(信赖我,这很常见),这时刻一台机械就很难搞定了,最后会很难算出结不雅。
0x02 数据倾斜长什么样
工作中碰到的大年夜部分的数据倾斜问题都解决了,并且也不想从新运行义务来截图,下面会分几个场景来描述一下数据倾斜的特点,便利读者辨别。
因为 Hadoop 和 Spark 是最常见的两个寂?娼台,下面就以这两个平台解释:
一、Hadoop中的数据倾斜
Hadoop中的数据倾斜重要表示在、ruduce 阶段卡在 99.99%,一向 99.99% 不克不及停止。
这里如不雅具体的看日记或者和监控界面的话会发明:
- 有一个多几个 reduce 卡住
- 各类 container 报错 OOM
- 读写的数据量极大年夜,至少远远跨越其它正常的 reduce
- 伴跟着数据倾斜,会出现义务被 kill 等各类诡异的表示。
经验:Hive 的数据倾斜,一般都产生在 Sql 中 Group 和 On 上,并且和数据逻辑绑定比较深。
二、Spark 中的数据倾斜
Hadoop 中最常用的是的是 Mapreduce 和 Hive ,虽说 Hive 最后也是用 MR 来履行(至少今朝Hive内存计算并不普及),然则毕竟写的内容逻辑差别很大年夜,一个是法度榜样,一个是 Sql,是以这里稍作区分。
Spark 中的数据倾斜也很常见,这里包含Spark Streaming 和 Spark Sql,表示重要有下面几种:
- Executor lost,OOM,Shuffle过程掉足
- Driver OOM
- 单个 executor 履行时光特别久,整体义务卡在某个阶段不克不及停止
- 正常运行的义务忽然掉败
留意: 很多半据倾斜的问题,都可以用和平台无关的方法解决,比如更好的数据预处理, 异常值的过滤等,是以笔者认为,解决数据倾斜的重点在于对数据设计和营业的懂得,这两个搞清跋扈了,数据倾斜就解决了大年夜部分了。
弥补一下,在 Spark streaming 法度榜样中,数据倾斜更轻易出现,特别是在法度榜样中包含一些类似 Sql 的 join、group 这种操作的时刻。 因为 Spark Streaming 法度榜样在运行的时刻,我们一般不会分派特别多的内存,是以一旦在这个过程中出现一些数据倾斜,就十分轻易造成 OOM。
0x03 数据倾斜的道理
一、数据倾斜产生的原因
我们以 Spark 和 Hive 的应用处景为例。他们在做数据运算的时刻会涉及到,count distinct、group by、join 等操作,这些都邑触发 Shuffle 动作,一旦触发,所有雷同 key 的值就会拉到一个或几个节点上,就轻易产生单点问题。
二、万恶的 Shuffle
Shuffle 是一个能产闹事业的处所,不管是在 Spark 照样 Hadoop 中,它们的感化都是至关重要的。关于 Shuffle 的道理,这里不再讲述,看看 Hadoop 相干的论文或者文┞仿懂得一下就 ok。这里重要针对在 Shuffle 若何产生了数据倾斜。
0x01 什么是数据倾斜
Hadoop 和 Spark 在 Shuffle 过程中产生数据倾斜的道理根本类似。
大年夜部分数据倾斜的道理就类似于下图,很清楚明了,因为数据分布不平均,导致大年夜量的数据分派到了一个节点。
三、大年夜数据角度来懂得数据倾斜
我们举一个例子,就说数据默认值的设计吧,假设我们有两张表:
- user(用户信息表):userid,register_ip
- ip(IP表):ip,register_user_cnt
这可能是两个不合的人开辟的数据表,如不雅我们的数据规范不太完美的话,会出现一种情况,user 表中的 register_ip 字段,如不雅获取不到这个信息,我们默认为 null,然则在 ip 表中,我们在统计这个值的时刻,为了便利,我们把获取不到 ip 的用户,同一认为他们的 ip 为 0。
推荐阅读
本篇总结一下本身对大年夜数据算法认知的过程。正文包含两部分:本身对算法的认知过程和对大年夜数据算法的懂得。写这篇博客的原因有很多,总的来讲有下面几点: 本身在算法的路上一向>>>详细阅读
本文标题:数据倾斜那些坑 你都迈过去了吗?
地址:http://www.17bianji.com/lsqh/38617.html
1/2 1