理解投机执行

学习投机执行是如何工作的,如何识别它,当你应该使用它。

写的mounika.tarigopula

去年发表在:11月7日,2022年

投机执行

投机执行可用于自动re-attempt任务不是进步相比其他任务在同一阶段。

这意味着如果一个或多个任务正在运行慢的阶段,他们会换。完成的任务首先是标记为成功。其他的尝试被杀害。

实现

当一个工作挂间歇性地和一个或多个任务挂,使投机执行往往是解决问题的第一步。由于投机执行,这不是进步缓慢挂任务是re-attempted在另一个节点。

这意味着如果一个或多个任务正在运行慢的阶段,任务是重新推出。在成功完成重新启动任务,最初的任务是标记为失败。如果重新推出前的原始任务完成任务,原任务的尝试被标记为成功,重新开办的任务是杀死。

除了投机执行,有一些额外的设置,可以根据需要调整。投机执行只应在必要时启用。

下面是投机的主要配置选项执行。

配置
描述
砖违约
OSS违约
spark.speculation
如果设置为真正的,执行投机执行的任务。这意味着如果一个或多个任务正在运行缓慢的阶段,他们会换。
spark.speculation.interval
经常引发如何检查任务来推测。
100毫秒
100毫秒
spark.speculation.multiplier
多少次慢的任务比中值被认为是投机。
3
1.5
spark.speculation.quantile
的任务必须完成之前猜测启用特定阶段
0.9
0.75

如何解释数据砖默认值吗

如果启用了投机执行(spark.speculation),然后每100毫秒(spark.speculation.intervalApache火花),检查缓慢运行的任务。一个任务被标记为缓慢运行的任务如果是运行超过三倍的时间(spark.speculation.multiplier)的平均执行时间完成任务。火花等到90% (spark.speculation.quantile)已经完成的任务开始前投机执行。

识别投机执行行动

  • 查看任务尝试在UI的火花。如果投机执行运行时,你看到的一个任务状态作为成功和其他任务状态TaskKilled
  • 投机执行不会总是开始,即使有缓慢的任务。这是因为投机执行之前必须满足的标准开始运行。这通常发生在用少量的任务阶段,只有一个或两个任务卡住了。如果spark.speculation.quantile不满足,投机执行不开始。

当启用投机执行

  • 投机时可以用于疏通火花应用程序执行一些任务运行超过预期,原因是不确定的。一旦确定了根本原因,你应该解决潜在问题和禁用投机执行。
  • 投机执行确保推测任务不安排在同一原始任务执行人。这意味着问题很容易造成一个坏VM实例通过使投机执行。

当不运行投机执行

  • 投机执行不应使用很长一段时间在生产工作很长一段时间。扩展使用可能导致失败的任务。
  • 如果操作中执行任务不是幂等,投机执行不应启用。
  • 如果你有数据倾斜,可以推测任务只要原始任务,保留最初的任务成功和推测死亡。投机执行并不保证推测任务先完成。
  • 使投机执行只能影响性能,所以它应该被用于故障诊断。如果您需要投机执行完成您的工作负载,打开一个砖的支持请求。砖的支持可以帮助确定任务缓慢的根源。


这篇文章有用吗?