美文网首页
Spark数据倾斜问题

Spark数据倾斜问题

作者: hipeer | 来源:发表于2018-10-30 20:29 被阅读0次

    什么是数据倾斜

    在对一个数据集进行并行处理的过程中,当执行Shuffle操作的时候,是通过Key来进行Value的输出,聚合等操作的。而对于相同的Key,都会被分到一个Redece Task来处理,那么如果某个Key所对应的Value数据量相比与其他的Key高出很多,就会出现数据倾斜。


    简单来说:
    数据倾斜就是,在一个并行处理的数据集中,某一个Partition的数据量显著高于其它的Partition,从而会导致整个数据集的处理速度下降。

    数据倾斜的现象

    在Spark中,每个Job会被划分为多个Stage,每个Stage会包含多个Task,这些Task会被并行处理。那么,如果出现了数据倾斜,也就是说,某一个Task所要处理的Partition数据量比起其他并行执行的Task所要处理的Partition数据量要大很多,那么,可以想象,这个数据集的处理速度就会远远落后于集群平均处理速度,就会浪费大量的时间。

    1. 假如,有一百万条数据要并行处理,共有4个Task,假设每个Task处理10万数据需要1分钟,那么,可以看出,前三个Task1分钟就能够执行完成,而第四个Task则需要7分钟才能执行完成,那么执行完整个Stage总共所需要的时间就是7分钟。
      如果没有发生数据倾斜,每个Task能够平均分配数据,即每个Task处理25万的数据,那么,执行完整个Stage所需要的时间就是2.5分钟。
      所以说,发生数据倾斜最直接的现象就是一些Task执行的很快,而有些Task就会执行的特别慢,从而降低对数据的处理速度。

    2. 第二种现象,就是,由于某个Task处理的数据量太大,导致执行该Task的机器内存根本放不下这些数据,就会发生OOM(OutOfMemory)异常,最终会导致,整个作业无法执行。

    如何定位数据倾斜的位置

    数据倾斜问题的出现,基本上是因为在程序中使用到了产生Shuffle的算子。

    1. 首先需要检查程序中有哪些地方使用到了产生Shuffle的算子,比如:reduceByKey,groupByKey,join,countByKey等。

    2. 检查log

    相关文章

      网友评论

          本文标题:Spark数据倾斜问题

          本文链接:https://www.haomeiwen.com/subject/rgmyaftx.html