【发布时间】:2019-10-16 22:01:29
【问题描述】:
我在 K8S 上使用 Spark 运行一些作业,有时我的执行者会在作业中死去。每当发生这种情况时,驱动程序都会立即删除失败的 pod 并生成一个新的。
有没有办法阻止 Spark 删除已终止的 executor pod?这将使调试故障变得容易得多。
现在我已经将所有 pod 的日志收集到另一个存储中,以便查看日志。但是查询每个 pod 的日志非常麻烦,而且我无法看到它们的 K8S 元数据。
【问题讨论】:
我在 K8S 上使用 Spark 运行一些作业,有时我的执行者会在作业中死去。每当发生这种情况时,驱动程序都会立即删除失败的 pod 并生成一个新的。
有没有办法阻止 Spark 删除已终止的 executor pod?这将使调试故障变得容易得多。
现在我已经将所有 pod 的日志收集到另一个存储中,以便查看日志。但是查询每个 pod 的日志非常麻烦,而且我无法看到它们的 K8S 元数据。
【问题讨论】:
此设置已添加到 SPARK-25515。遗憾的是,它不适用于当前发布的版本,但它应该在 Spark 3.0.0 中可用
【讨论】:
使用job.spec.ttlSecondsAfterFinished 确定在作业完成/失败后 pod 将存在多长时间。
对于example:
apiVersion: batch/v1
kind: Job
metadata:
name: pi-with-ttl
spec:
ttlSecondsAfterFinished: 100
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
作业pi-with-ttl 将在完成后100 秒后自动删除。
如果该字段设置为 0,则作业将有资格在完成后立即自动删除。如果未设置该字段,则该作业完成后不会被 TTL 控制器清理。
请注意,此 TTL 机制是 alpha,具有特征门
TTLAfterFinished。有关详细信息,请参阅文档 TTL controller 已完成资源。
【讨论】: