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

Databricks中如何从一个S3账号读取数据并写入另一个S3账号

问题原因

你之前的切换操作不生效的核心原因是:Spark运行时Hadoop配置会在会话初始化后分发到所有Executor节点,且S3A文件系统客户端默认会缓存已申请的STS临时角色凭证,你后续仅修改Driver端的全局Hadoop配置,既不会同步更新Executor端的已缓存配置,也不会清空S3A客户端缓存的旧角色凭证,因此切换不生效。

可行解决方案

方案1:按桶配置独立角色(最优,无需中途切换)

直接为两个不同账号的S3桶分别绑定对应角色配置,S3A客户端访问对应桶时会自动匹配专属配置,无需中途修改全局参数:

# 为账号A的桶配置跨账号访问角色
sc._jsc.hadoopConfiguration().set("fs.s3a.bucket.BUCKET_IN_ACCOUNT_A.credentialsType", "AssumeRole")
sc._jsc.hadoopConfiguration().set("fs.s3a.bucket.BUCKET_IN_ACCOUNT_A.stsAssumeRole.arn", XACCOUNT_ROLE)
sc._jsc.hadoopConfiguration().set("fs.s3a.bucket.BUCKET_IN_ACCOUNT_A.acl.default", "BucketOwnerFullControl")

# 为账号B的桶配置默认访问角色
sc._jsc.hadoopConfiguration().set("fs.s3a.bucket.BUCKET_IN_ACCOUNT_B.credentialsType", "AssumeRole")
sc._jsc.hadoopConfiguration().set("fs.s3a.bucket.BUCKET_IN_ACCOUNT_B.stsAssumeRole.arn", ROLE_B)
sc._jsc.hadoopConfiguration().set("fs.s3a.bucket.BUCKET_IN_ACCOUNT_B.acl.default", "BucketOwnerFullControl")

# 直接执行读写操作即可
df = spark.read.option("multiline","true").json(BUCKET_IN_ACCOUNT_A)
df.write.format("delta").mode("append").save(BUCKET_IN_ACCOUNT_B)

配置中的BUCKET_IN_ACCOUNT_A、BUCKET_IN_ACCOUNT_B需替换为实际的S3桶名称。

方案2:关闭角色凭证缓存后切换全局配置

如果必须中途切换全局角色,需要在会话初始化阶段先关闭S3A的角色凭证缓存,后续修改的全局配置才会生效:

# 初始化SparkSession后第一时间添加该配置,关闭STS凭证缓存
sc._jsc.hadoopConfiguration().set("fs.s3a.assumed.role.credential.cache.max.size", "0")

# 第一步:使用跨账号角色读取A桶
sc._jsc.hadoopConfiguration().set("fs.s3a.credentialsType", "AssumeRole")
sc._jsc.hadoopConfiguration().set("fs.s3a.stsAssumeRole.arn", XACCOUNT_ROLE)
sc._jsc.hadoopConfiguration().set("fs.s3a.acl.default", "BucketOwnerFullControl")
df = spark.read.option("multiline","true").json(BUCKET_IN_ACCOUNT_A)

# 第二步:切换为ROLE_B写入B桶
sc._jsc.hadoopConfiguration().set("fs.s3a.stsAssumeRole.arn", ROLE_B)
df.write.format("delta").mode("append").save(BUCKET_IN_ACCOUNT_B)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:54:00