Databricks Notebook访问GCP存储报元数据服务器访问令牌获取错误咨询
报错产生原因
- 服务账号私钥配置不完整:你当前填写的
spark.hadoop.fs.gs.auth.service.account.private_key值仅为--BEGIN,缺少完整的私钥内容,导致服务账号密钥认证失败,Spark自动回退到GCP实例元数据服务获取默认令牌,而Databricks社区版运行在AWS环境,无法访问GCP内网的元数据地址169.254.169.xxx,因此触发该报错。 - 核心配置缺失:没有配置GCS文件系统的实现类参数
spark.hadoop.fs.gs.impl,Spark无法正确识别gs://协议的处理逻辑,导致认证流程走默认的实例元数据路径。 - 参数格式错误:你贴出的配置最后一行
spark.hadoop.fs.gs.auth.service.account.private_key_id的末尾带有多余的```符号,会导致参数解析失败,所有GCS相关配置不生效。 - 补充:你写的读取代码存在语法问题,
format(csv)中的csv缺少引号,该问题不触发当前认证报错,但认证修复后会触发语法报错,需要同步修正。
对应解决方法
- 补全完整的服务账号私钥:从GCP IAM控制台重新下载对应服务账号的JSON密钥文件,复制完整的
private_key字段内容(包含开头的-----BEGIN PRIVATE KEY-----和结尾的-----END PRIVATE KEY-----),替换当前不完整的私钥配置,注意私钥字符串需要用引号完整包裹,保留内部的换行符。 - 新增GCS连接器必要配置:在Spark参数中新增如下两个配置项:
spark.hadoop.fs.gs.impl com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem spark.hadoop.fs.AbstractFileSystem.gs.impl com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS
- 修正参数格式错误:删除
spark.hadoop.fs.gs.auth.service.account.private_key_id参数值末尾多余的```符号,确保所有GCS相关配置的键值对都正确闭合,无多余字符。 - 修正读取代码的语法问题:将代码调整为如下格式:
df = spark.read.format("csv").load("gs://test-gcs-doc-bucket-pr/test")
- 所有配置修改完成后,重启Databricks集群,重新运行代码即可正常访问GCS存储。
内容的提问来源于stack exchange,提问作者Paulo
相关产品推荐
相关产品推荐

