其他
简单说几句数据倾斜可以说是大数据开发中见怪不怪的事情了,那么什么情况下会出现数据倾斜?以及出现的时候会有什么症状呢?请接下往下看症状以及原因比如一个spark任务中,绝大多数task任务运行速度很快,但是就是有那么几个task任务运行极其缓慢,慢慢的可能就接着报内存溢出的问题了,那么这个时候我们就可以认定是数据倾斜了.为什么会这种情况呢?其实这个一般发生在shuffle类的算子中,在进行shuffle的时候,必须将各个节点的相同的key拉到某个节点上的一个task来进行处理,比如按照key进行聚合和join操作等,这个时候其中某一个key数量特别大,于是就发生了数据倾斜分组聚合逻辑中,需要把相同key的数据发往下游同一个task,如果某个或某几个key的数量特别大,则会导致下游的某个或某几个task所要处理的数据量特别大,也就是要处理的任务负载特别大join计算中,A表和B表中相同key的数据,需要发往下游同一个task,如果A表中或B表中,某个key或某几个key的数量特别大,则会导致下游的某个或某几个task所要处理的数据量特别大,也就是要处理的任务负载特别大如何定位数据倾斜?上面简单说明了一下数据倾斜的症状以及原理,那么如果定位到具体哪块的代码出现了数据倾斜呢?首先我们知道了数据倾斜是发生在shuffle阶段,那么肯定就要先找shuffle类的算子,比如distinct、groupByKey、reduceByKey、aggregateByKey、join、cogroup等我们知道一个application会拆分为多个job,一个job又会划分多个stage,stage的划分就是根据shuffle类的算子,也可以说是宽依赖来划分的这个时候就可以在spark