You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Dataproc Serverless自定义容器运行PySpark作业无法访问脚本问题

解决Dataproc Serverless自定义容器中访问PySpark脚本的问题

错误原因

你提交命令中使用的file://helloword.py会让Dataproc尝试将指定路径的文件上传到集群临时目录,但你的脚本已经包含在自定义镜像内,这个写法会导致系统误将临时目录当作可执行脚本读取,从而抛出Is a directory的异常。

修复步骤

1. 调整Dockerfile,确保脚本路径与权限正确

当前Dockerfile未指定工作目录,脚本会被复制到根目录,可能引发权限问题。修改后的Dockerfile如下:

# Base image
FROM centos:7

# 提前创建spark用户组与用户
RUN groupadd -g 1099 spark
RUN useradd -u 1099 -g 1099 -d /home/spark -m spark

# 设置spark用户的工作目录
WORKDIR /home/spark

# 将脚本复制到工作目录(spark用户拥有读写权限)
COPY helloword.py .

# 安装工具
RUN yum install -y curl wget procps

# 安装tini
ENV TINI_VERSION=v0.19.0
RUN curl -fL "https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini" -o /usr/bin/tini \
&& chmod +x /usr/bin/tini

USER spark

重新构建镜像并推送到Google Container Registry:

docker build -t eu.gcr.io/name_project/image-test .
docker push eu.gcr.io/name_project/image-test

2. 修改作业提交命令,指定镜像内的脚本绝对路径

移除file://前缀,直接使用脚本在镜像内的绝对路径(即/home/spark/helloword.py):

gcloud dataproc batches submit pyspark --batch name_batch /home/spark/helloword.py \
  --project name_project \
  --region europe-west9 \
  --version 1.1.19 \
  --container-image "eu.gcr.io/name_project/image-test" \
  --subnet default \
  --service-account service_account

3. 确保脚本是有效的PySpark入口文件

你的helloword.py需要包含可执行的PySpark逻辑,示例如下:

from pyspark.sql import SparkSession

if __name__ == "__main__":
    spark = SparkSession.builder.appName("HelloWorld").getOrCreate()
    print("Hello World from custom container!")
    spark.stop()

内容的提问来源于stack exchange,提问作者Sophie192

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:17:06