Dataproc on GKE:配置属性中指定的Python包未安装
问题:Dataproc on GKE提交作业报错ModuleNotFoundError:No module named 'google'
问题详情
在GKE集群上创建Dataproc集群后,已通过配置属性指定所需Python包,但提交作业时触发ModuleNotFoundError,找不到google模块。
错误日志
... Waiting for job output... PYSPARK_PYTHON=/opt/conda/bin/python JAVA_HOME=/usr/lib/jvm/temurin-8-jdk-amd64 SPARK_EXTRA_CLASSPATH= Merging Spark configs Skipping merging /opt/spark/conf/spark-defaults.conf, file does not exist. Skipping merging /opt/spark/conf/log4j.properties, file does not exist. Skipping merging /opt/spark/conf/spark-env.sh, file does not exist. Skipping custom init script, file does not exist. Running heartbeat loop Traceback (most recent call last): File "/tmp/spark-d6516b57-0924-4ce2-9de8-a5c1116667b4/pkg.py", line 1, in <module> from google.cloud import secretmanager ModuleNotFoundError: No module named 'google'
集群创建命令
gcloud dataproc clusters gke create gke-dp --region=asia-southeast1 --spark-engine-version=3.1 \ --gke-cluster=gke-spark --gke-cluster-location=asia-southeast1-b --namespace=dataproc \ --pools='name=dp-default,roles=default,machineType=n2-standard-2,min=1,max=1' \ --pools='name=dp-workers,roles=spark-driver;spark-executor,machineType=n2-standard-4,min=1,max=4' \ --properties='^#^dataproc:pip.packages=google-cloud-secret-manager==2.15.0,numpy==1.24.1#spark:spark.jars=https://jdbc.postgresql.org/download/postgresql-42.5.1.jar' \ --properties="dataproc:dataproc.gke.agent.google-service-account=dataproc@de-project.iam.gserviceaccount.com" \ --properties="dataproc:dataproc.gke.spark.driver.google-service-account=dataproc@de-project.iam.gserviceaccount.com" \ --properties="dataproc:dataproc.gke.spark.executor.google-service-account=dataproc@de-project.iam.gserviceaccount.com"
解决方案
核心原因
错误日志显示Spark使用的Python环境是/opt/conda/bin/python,但默认情况下dataproc:pip.packages会将包安装到系统Python环境(/usr/bin/python3),导致Spark运行时找不到依赖。
方法1:强制使用conda环境的pip安装包
修改集群创建命令中的properties参数,添加dataproc:pip.command=/opt/conda/bin/pip,指定用Spark对应的conda环境下的pip安装依赖:
--properties='^#^dataproc:pip.packages=google-cloud-secret-manager==2.15.0,numpy==1.24.1#spark:spark.jars=https://jdbc.postgresql.org/download/postgresql-42.5.1.jar#dataproc:pip.command=/opt/conda/bin/pip'
方法2:切换Spark使用系统Python环境
如果不需要conda环境,直接修改Spark配置,让它使用系统Python:
--properties='^#^spark:spark.pyspark.python=/usr/bin/python3#spark:spark.pyspark.driver.python=/usr/bin/python3#dataproc:pip.packages=google-cloud-secret-manager==2.15.0,numpy==1.24.1'
方法3:用初始化脚本手动安装包
如果上述方法无效,编写初始化脚本手动在conda环境安装依赖:
- 创建脚本
install_pkgs.sh:
#!/bin/bash /opt/conda/bin/pip install google-cloud-secret-manager==2.15.0 numpy==1.24.1
- 将脚本上传到GCS存储桶(如
gs://your-bucket/install_pkgs.sh) - 创建集群时添加初始化脚本参数:
--initialization-actions=gs://your-bucket/install_pkgs.sh
验证方法
集群创建完成后,登录driver节点执行以下命令,确认包已安装:
/opt/conda/bin/pip list | grep google-cloud-secret-manager
内容的提问来源于stack exchange,提问作者suisen
相关产品推荐
相关产品推荐

