Driver端如何正确取消Spark中的job

本文探讨了如何在Spark中正确取消job,通过SparkContext的API和自定义SparkListener来跟踪与取消作业。在作业提交时设置线程局部变量以标识job,当需要取消时,通过调用SparkContext的cancelJob方法,最终由executor调用Thread.interrupt。在任务代码中需检查并响应中断标志,确保清理工作。此外,还需配置spark.job.interruptOnCancel为true以启用job的中断机制。
摘要由CSDN通过智能技术生成

1.      SparkContext提供了一个取消job的api

class SparkContext(config: SparkConf) extends Logging with ExecutorAllocationClient {
/** Cancel a given job if it's scheduled or running */
private[spark] def cancelJob(jobId: Int) {
  dagScheduler.cancelJob(jobId)
}
}

2.      那么如何获取jobId呢?

Spark提供了一个叫SparkListener的对象,它提供了对spark事件的监听功能

trait SparkListener {
  /**
   * Called when a job starts
   */
  def onJobStart(jobStart: SparkListenerJobStart) { }

  /**
   * Called when a job ends
   */
  def onJobEnd(jobEnd: SparkListenerJobEnd) { }
}

因此需要自定义一个类,继承自SparkListener,即:

public class DHSparkListener implements SparkListener {
private static Logger logger = Logger.getLogger(DHSparkListener.class);
//存储了提交job的线程局部变量和job的映射关系
    private static ConcurrentHashMap<String, In
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值