我想在带有超时参数的集群环境中提交作业,是否有办法让 Spark 在超出允许的持续时间时杀死正在运行的作业?
在 Spark 2.1.0 中,没有内置解决方案(这是一个非常好的功能,需要添加!)。
您可以使用speculation功能来重新启动长任务并spark.task.maxFailures杀死太多重新启动的任务。
但这绝对不干净,Spark缺少一个真正的“断路器”来停止长任务(例如noob SELECT * FROM DB)
另一方面,您可以使用 Spark Web UI Web API:
1)获取正在运行的作业:GET http://SPARK_CLUSTER_PROD/api/v1/applications/application_1502112083252_1942/jobs?status=running
(这将为您提供一个带有submissionTime字段的数组,您可以使用它来查找长作业)
2)终止作业:POST http://SPARK_CLUSTER_PROD/stages/stage/kill/?id=23881&terminate=true针对每个作业阶段。
我相信Spark也有一个隐藏的API,你可以尝试使用。