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