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

GCP Dataproc运行PySpark作业无法读取GCS存储桶内SSL pem证书

问题根因

你当前的证书引用方式是错误的,和权限配置无关:

  • confluent_kafka底层依赖librdkafka库,该库读取SSL证书时调用的是操作系统原生fopen接口,该接口仅支持读取节点本地文件系统的文件,无法直接识别GCS专属的gs://协议路径,所以报找不到文件的错误。
修复方案

有两种常用的落地方式,优先选择第一种:

方案1:提交作业时同步证书(推荐)

Dataproc提交作业支持通过--files参数自动将GCS上的依赖文件同步到作业运行的当前工作目录,无需提前修改集群配置:

  1. 提交作业时新增--files参数,指定需要同步的三个证书文件:
gcloud dataproc jobs submit pyspark gs://dataproc_kafka_code/code/KafkaProducer.py \
--cluster <你的Dataproc集群名称> \
--region <集群所属区域> \
--files gs://dataproc_kafka_code/code/caroot.pem,gs://dataproc_kafka_code/code/my-bridge-user-crt.pem,gs://dataproc_kafka_code/code/user-with-certs.pem
  1. 修改代码中的证书路径为文件名即可,无需加前缀:
# 修改后的证书配置
caRootLocation='caroot.pem'
certLocation='my-bridge-user-crt.pem'
keyLocation='user-with-certs.pem'

方案2:集群初始化时预下载证书

如果有大量作业需要用到该证书,可以通过初始化脚本提前将证书下载到所有集群节点的本地路径:

  1. 编写初始化脚本init_certs.sh,内容如下:
#!/bin/bash
# 创建证书存放目录
mkdir -p /opt/kafka-certs
# 拉取GCS上的所有证书
gsutil cp gs://dataproc_kafka_code/code/*.pem /opt/kafka-certs/
# 授予读权限
chmod 644 /opt/kafka-certs/*.pem
  1. 将脚本上传到GCS,创建集群时指定该初始化脚本,或给现有集群执行初始化操作。
  2. 修改代码中的证书路径为节点本地路径:
# 修改后的证书配置
caRootLocation='/opt/kafka-certs/caroot.pem'
certLocation='/opt/kafka-certs/my-bridge-user-crt.pem'
keyLocation='/opt/kafka-certs/user-with-certs.pem'
权限校验补充

确认Dataproc集群的默认服务账号拥有gs://dataproc_kafka_code存储桶的对象读取权限(storage.objects.get),默认配置下该权限已经存在,如果你手动修改过服务账号权限需要单独补全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:54:07