Kubernetes Spark Operator 无法在映像中找到 JAR 文件

问题描述 投票:0回答:1

我正在尝试使用 Kubernetes Spark Operator 部署 SparkApplication。我为 Spark 作业构建了一个自定义 Docker 映像,但遇到了一个问题:驱动程序 pod 找不到应该包含在映像中的 JAR 文件。

这是我的 Dockerfile:

FROM bitnami/spark:3.5.3

WORKDIR /opt/spark/work-dir

COPY target/scala-2.12/app.jar /opt/spark/work-dir/

USER root
RUN chmod 777 /opt/spark/work-dir/app.jar

EXPOSE 8080

我使用以下命令构建并推送图像:

docker buildx build --platform=linux/amd64 -t repo/image:TAG .
docker push repo/image:TAG

当我使用以下命令在本地检查图像时:

docker run --rm -it repo/image:TAG /bin/bash

我可以看到 JAR 文件存在于预期目录中:

-> pwd
/opt/spark/work-dir
-> ls
app.jar

接下来,我使用此 YAML 文件部署 Spark 应用程序:

apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
  name: $APP
  namespace: $NAMESPACE
spec:
  type: Scala
  mode: cluster
  image: repo/image:TAG
  imagePullPolicy: Always
  mainClass: com.org.app.api.Api
  mainApplicationFile: "local:///opt/spark/work-dir/app.jar"
  sparkVersion: "3.5.3"
  driver:
    cores: 2
    memory: "2G"
    serviceAccount: spark
  executor:
    cores: 4
    instances: 2
    memory: "4G"
  sparkConf:
    "spark.kubernetes.container.image.pullPolicy": "Always"
    "spark.kubernetes.namespace": "namespace-name"

但是,当我描述驱动程序容器或检查其日志时,我看到以下错误:

Files local:///opt/spark/work-dir/app.jar from /opt/spark/work-dir/app.jar to /opt/spark/work-dir/app.jar
Exception in thread "main" java.nio.file.NoSuchFileException: /opt/spark/work-dir/app.jar

我尝试过的事情

  1. 验证 JAR 文件存在于 Docker 映像中(docker run 确认了这一点)。
  2. 确保 SparkApplication YAML 中的 mainApplicationFile 指向正确的路径 (local:///opt/spark/work-dir/app.jar)。
  3. 使用linux/amd64平台构建镜像以避免架构不匹配(我的Kubernetes集群在AMD64节点上运行)。
  4. 使用 imagePullPolicy:始终确保 Kubernetes 拉取最新镜像。
  5. 使用入口点构建图像。
apache-spark kubernetes kubernetes-operator
1个回答
0
投票

我通过将 Spark 应用程序 JAR 文件复制到的目录更改为 /opt/bitnami/spark/examples/jars/ 解决了该问题。

这是更新后的 Dockerfile: 来自 bitnami/spark:3.5.3

复制目标/scala-2.12/qupid-deequ- assembly-0.1.0-SNAPSHOT.jar /opt/bitnami/spark/examples/jars/

用户根 运行 chmod -R 777 /opt

暴露8080

Spark Operator 或 Bitnami Spark 映像似乎具有特定的默认配置或应用程序 JAR 文件的预期位置,即 /opt/bitnami/spark/examples/jars/。进行此更改后,驱动程序能够毫无问题地找到 JAR 文件。

如果有人深入了解为什么需要此特定目录或将其记录为此图像中 Spark 应用程序的默认目录,我有兴趣了解更多信息!

© www.soinside.com 2019 - 2024. All rights reserved.