关于Spark中的常见问题及解决方法(2) ——Stragglers/任务执行缓慢

前言

在优化应用程序时,这类问题非常常见,大多数时候可能是由于Tasks在集群上不均匀分,数据倾斜,或者某台计算节点的性能比其的差(例如,硬件上的性能劣势)。

主要症状

  • 某一个task卡主导致后续的stage无法启动
  • Spark UI在观察到对于同一个数据集的作业,某些tasks总是执行缓慢。
  • 增加更多的executor并不能解决问题,某些task依旧比其他的消耗更多的时间。
  • 在SparkUI中可以观察到某些task比其他的读写更多的数据。

可能的原因

执行缓慢的任务通常被称为"stragglers(落后者)"。造成这种情况的原因有很多,但大多数情况下,这个问题的根源是被处理数据被不均匀地划分到DataFrame或RDD分区内。 当发生这种情况时,一些Executor可能需要处理比其Executor更多的工作。 一个特别常见的情况是使用group-by-key操作,其中一个键比其他键含有更多的数据。 在这种情况下,当我们查看Spark UI时,会发现某些节点的shuffle数据比其他节点大得多。

可能的解决方法

  • 尝试增加分区数,减少每个分区包含的数据。
  • 尝试通过另一种列组合重新分区。 例如,当您通过倾斜列可能包含许多值为null的列进行分区时,straggler就会出现。 在后一种情况下,首先过滤掉空值可能是有意义的。
  • 如果可以,尝试增加每个executor
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值