Dataproc集群Spark 3.3.2升级至3.5的干净安装及技术问询
在Dataproc 2.1集群上从Spark 3.3.2升级到Spark 3.5的实践指南
1. 升级推荐步骤及gcloud作业提交适配
集群节点部署Spark 3.5
- 在集群所有节点(主节点+工作节点)执行统一操作:
- 下载与Dataproc 2.1自带Hadoop 3.3.x兼容的Spark 3.5二进制包(选择
Pre-built for Apache Hadoop 3.3 and later版本) - 解压到全局统一路径,例如
/opt/spark-3.5.0,并设置权限:sudo chown -R hadoop:hadoop /opt/spark-3.5.0 - 复制原预装Spark的配置:
sudo cp -r /etc/spark/conf/* /opt/spark-3.5.0/conf/,后续再按需调整配置适配3.5版本
- 下载与Dataproc 2.1自带Hadoop 3.3.x兼容的Spark 3.5二进制包(选择
提交作业时指定自定义Spark版本
手动修改环境变量仅对当前终端生效,通过gcloud dataproc jobs submit提交作业时,需显式指定Spark路径:
gcloud dataproc jobs submit spark \ --cluster=your-cluster-name \ --region=your-region \ --properties spark.home=/opt/spark-3.5.0 \ --class=your.main.class \ --jars=your-job.jar
该参数会让Dataproc的作业启动器使用指定路径下的Spark二进制文件和依赖。
2. 升级注意事项与潜在陷阱
GCS连接器兼容性
- 预装Spark的GCS连接器版本可能不兼容Spark 3.5,需替换为适配版本(例如
gcs-connector-hadoop3-2.2.10及以上):- 删除新Spark
jars目录下旧的GCS连接器包(如果有) - 将兼容的连接器jar包放入
/opt/spark-3.5.0/jars/,或在作业提交时通过--jars指定
- 删除新Spark
- 确保
spark-defaults.conf中保留Dataproc的GCS配置项:spark.hadoop.fs.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem
自定义安装的遗漏点
- 权限配置:新Spark目录及文件需赋予
hadoop用户/组权限,否则作业运行时会出现权限拒绝错误 - Dataproc集成工具适配:
- 作业历史服务:默认使用预装Spark的历史服务,需重新配置指向新Spark的历史服务(详见问题3)
- 日志采集:自定义Spark的日志路径需与Dataproc默认路径(
/var/log/spark)保持一致,否则Stackdriver无法采集作业日志
- 依赖冲突:避免将预装Spark的
jars目录加入自定义Spark的classpath,防止版本冲突
3. 除SPARK_HOME外的配置与依赖处理,及Spark UI适配
需调整的配置项
- Hadoop配置关联:在新Spark的
spark-env.sh中添加:export HADOOP_CONF_DIR=/etc/hadoop/conf,确保Spark能读取Dataproc的Hadoop集群配置 - Spark环境变量调整:
- 在
spark-env.sh中同步原预装Spark的JAVA_HOME、SPARK_DAEMON_JAVA_OPTS等参数(例如内存、GC配置) - 检查
spark-defaults.conf,适配Spark 3.5的新配置项(例如spark.sql.legacy.timeParserPolicy默认值变更,需按需调整)
- 在
- 第三方依赖同步:如果原集群使用了BigQuery连接器、HBase连接器等,需替换为兼容Spark 3.5的版本,放入新Spark的
jars目录
确保Spark UI指向升级后的版本
由于Dataproc采用Spark on YARN模式,作业UI默认通过YARN ResourceManager跳转,只需确保作业使用自定义Spark版本运行即可。对于历史作业UI:
- 停止预装Spark的历史服务:
sudo systemctl stop spark-history-server - 在新Spark的
spark-defaults.conf中配置:
保持与原配置的日志目录一致spark.eventLog.dir=gs://your-history-bucket/spark-history spark.history.fs.logDirectory=gs://your-history-bucket/spark-history - 启动新Spark的历史服务:
/opt/spark-3.5.0/sbin/start-history-server.sh - 访问Dataproc集群的UI页面,历史作业会自动指向新Spark的历史服务UI
4. 自定义Spark的已知兼容性问题
- YARN版本匹配:必须选择与Dataproc 2.1自带Hadoop 3.3.x兼容的Spark 3.5包,否则会出现YARN资源调度的兼容性错误
- Kerberos认证适配:如果集群启用Kerberos,需在新Spark的
spark-env.sh中配置KRB5_CONFIG=/etc/krb5.conf,并确保Spark作业能获取有效的Kerberos票据 - Dataproc元数据集成:自定义Spark作业不会自动继承集群的标签信息,需在提交作业时通过
--properties spark.dataproc.cluster.id=your-cluster-id或gcloud的--labels参数手动添加,确保作业能在Dataproc控制台正常显示 - 初始化脚本冲突:如果集群使用了Dataproc初始化脚本,需修改脚本路径指向自定义Spark的目录,避免脚本修改预装Spark的配置影响自定义版本的运行
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

