【问题标题】:Spark on Kubernetes executor cleanupSpark on Kubernetes 执行器清理
【发布时间】:2019-10-16 22:01:29
【问题描述】:

我在 K8S 上使用 Spark 运行一些作业,有时我的执行者会在作业中死去。每当发生这种情况时,驱动程序都会立即删除失败的 pod 并生成一个新的。

有没有办法阻止 Spark 删除已终止的 executor pod?这将使调试故障变得容易得多。

现在我已经将所有 pod 的日志收集到另一个存储中,以便查看日志。但是查询每个 pod 的日志非常麻烦,而且我无法看到它们的 K8S 元数据。

【问题讨论】:

    标签: apache-spark kubernetes


    【解决方案1】:

    此设置已添加到 SPARK-25515。遗憾的是,它不适用于当前发布的版本,但它应该在 Spark 3.0.0 中可用

    【讨论】:

      【解决方案2】:

      使用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 已完成资源。

      【讨论】:

      • 我没有为此使用 Job 资源。 Spark 创建了一个驱动程序 pod,它自己创建了自己的执行程序 pod。所以它需要某种火花设置。这些 pod 都是在没有控制器资源的情况下创建的。
      猜你喜欢
      • 1970-01-01
      • 2021-12-22
      • 2017-01-11
      • 1970-01-01
      • 2022-10-09
      • 2018-04-16
      • 2023-01-04
      • 2016-10-03
      • 2016-07-22
      相关资源
      最近更新 更多