【问题标题】:Spark on Kubernetes: Is it possible to keep the crashed pods when a job fails?Spark on Kubernetes:当作业失败时是否可以保留崩溃的 Pod?
【发布时间】:2021-08-15 18:46:39
【问题描述】:

我有一个奇怪的问题,即在 Kubernetes 上运行的 Spark 作业失败,在进行大量洗牌的作业中出现很多“缺少 shuffle X 的输出位置”。增加执行程序内存无济于事。在本地 [*] 模式下仅在 Kubernetes 集群的单个节点上运行的相同作业运行良好,但是我怀疑它与 Kubernetes 或底层 Docker 有关。 当 executor 死亡时,pod 会立即被删除,所以我无法追踪它失败的原因。是否有一个选项可以保留失败的 pod,以便我可以查看它们的日志?

【问题讨论】:

    标签: apache-spark kubernetes


    【解决方案1】:

    您可以像这样查看上一个终止的 pod 的日志:

    kubectl logs -p <terminated pod name>
    

    还可以使用 here 提到的 Job 的 spec.ttlSecondsAfterFinished 字段

    【讨论】:

    • 如何在 Kubernetes 上使用 Spark 设置 spec.ttlSecondsAfterFinished?另外,当 Pod 失败时,spark-submit deletes。我想防止这种情况发生。
    • 当我这样做时,我得到:Error from server (NotFound): pods "myjob-1591253329725-exec-1" not found
    【解决方案2】:

    默认情况下,执行器会在任何失败时被删除,除非您在 K8s 代码上自定义 Spark 或使用一些高级 K8s 工具,否则您无法对此做任何事情。 您可以做的(并且很可能是最简单的方法开始)是配置一些外部日志收集器,例如。 Grafana Loki 可以一键部署到任何 K8s 集群或一些 ELK stack 组件。即使在 pod 被删除后,这些也会帮助您保留日志。

    【讨论】:

      【解决方案3】:

      在 spark 应用程序 yaml 中有一个deleteOnTermination 设置。见the spark-on-kubernetes README.md

      deleteOnTermination - (可选) DeleteOnTermination 指定在发生故障或正常终止时是否应删除 executor pod。

      映射到自 Spark 3.0 起可用的 spark.kubernetes.executor.deleteOnTermination

      【讨论】:

        猜你喜欢
        • 2019-06-03
        • 2019-05-05
        • 1970-01-01
        • 2019-05-28
        • 2019-05-23
        • 2019-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多