Spark speculation(推测执行)详解

Spark的speculation功能用于应对任务运行过慢的问题,通过重新启动可能慢速的任务来优化性能。当配置开启推测执行,Spark会在同一Stage内针对正在运行的任务进行推测,提前采用已完成任务的结果并标记任务完成。工作流程包括在TaskScheduler初始化时设置,TaskSetManager检测推测条件,以及DAGScheduler利用事件机制重新启动任务。
摘要由CSDN通过智能技术生成

为什么需要speculation

我们都知道,Spark job中,一个stage什么时候完成,取决于stage下最后一个task的完成时间。task的完成时间也被很多因素影响,比如partition的分配,executor的资源使用情况,host的运行状态,集群网络等等。很多情况下因为运行环境导致的task跑的过慢,让task可以重新跑起来是可以缓解这个问题的,因此Spark就支持了speculation(推测)功能。本文我们将来详细介绍下什么是spark的speculation。

Spark.Speculation

在spark的configuration中,关于speculation的参数如下:

property name default meaning
spark.speculation false 如果设置为"true", 就会对tasks执行推测机制。就是说在一个stage下跑的慢的tasks将有机会被重新启动
spark.speculation.interval 100ms Spark检测tasks推测机制的间隔时间
spark.speculation.multiplier 1.5 一个task的运行时间是所有task的运行时间中位数的几倍(门限值)才会被认为该task需要重新启动
spark.speculation.quantile 0.75 当一个stage下多少百分比的tasks运行完成才会开启推测机制

我们注意到,推测机制都是基于一个stage下进行的,不同的stage下的task是不会相互影响的,针对的也是正在运行的task。当启动了推测执行后,spark会获取先完成的task结果并且将task标记为完成。

Speculation工作流程

从spark关于speculation的配置参数,我们可以不难判断出spark的推测的工作流程。

在这里插入图片描述

Spark源码

TaskScheduler的启动函数,在sparkContext初始化时被调用。

override def start() {
   
    backend.start()

    if (!isLocal && conf.getBoolean("spark.speculation", false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值