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

Databricks无法在Minio存储桶创建表的问题排查

Databricks连接Minio创建数据库时403错误的解决办法

问题场景

已通过Spark Context配置S3参数:

access_key = 'XXXX'
secret_key = 'XXXXXXX'
sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", access_key)
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", secret_key)
sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "http://my-ip:9000")

可以正常通过df.write.format("parquet").save("s3a://my-bucket/file-path")写入数据到Minio,但执行创建数据库语句时:

spark.sql("create database if not exists minio_db_1 managed location 's3a://my-bucket/minio_db_1'")

抛出403 Forbidden异常,请求未路由到指定的Minio端点,而是转向AWS S3通用端点。

报错信息(翻译后)

AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message: 遇到异常:java.nio.file.AccessDeniedException s3a://my-bucket/my-database: 调用getFileStatus访问s3a://test2/minio_db_1时出错:com.amazonaws.services.s3.model.AmazonS3Exception: 禁止访问;请求详情:HEAD https://test2.s3.us-east-1.amazonaws.com minio_db_1 {} Hadoop 3.3.4, aws-sdk-java/1.12.189 Linux/5.4.0-1093-aws OpenJDK_64-Bit_Server_VM/25.345-b01 java/1.8.0_345 scala/2.12.14 vendor/Azul_Systems,_Inc. cfg/retry-mode/legacy com.amazonaws.services.s3.model.GetObjectMetadataRequest; 请求ID: 6YBEAZY59EYGAEVB, 扩展请求ID: o+h6YBGczQmWsnFMW8kLGi+llJ+v3ysqoz05fnNYTH901+ACgmi5x50dE2ekXbNrr3qQf81uOx8=, 云服务商: AWS, 实例ID: i-072d1969af3c17cb6 (服务: Amazon S3; 状态码: 403; 错误码: 403 Forbidden; 请求ID: 6YBEAZY59EYGAEVB; S3扩展请求ID: o+h6YBGczQmWsnFMW8kLGi+llJ+v3ysqoz05fnNYTH901+ACgmi5x50dE2ekXbNrr3qQf81uOx8=; 代理: null), S3扩展请求ID: o+h6YBGczQmWsnFMW8kLGi+llJ+v3ysqoz05fnNYTH901+ACgmi5x50dE2ekXbNrr3qQf81uOx8=:403 禁止访问

缺失的配置及解决步骤

需要在Spark Context的Hadoop配置中添加以下两个关键参数:

# 新增配置项
sc._jsc.hadoopConfiguration().set("fs.s3a.path.style.access", "true")
sc._jsc.hadoopConfiguration().set("fs.s3a.connection.ssl.enabled", "false")

参数说明

  • fs.s3a.path.style.access=true:强制使用路径样式访问(格式为http://endpoint/bucket/path),替代AWS默认的虚拟主机样式(http://bucket.endpoint/path)。这是解决请求跳转到AWS S3端点的核心配置,确保所有请求都路由到你的Minio实例。
  • fs.s3a.connection.ssl.enabled=false:如果你的Minio未配置SSL(使用http协议),必须关闭此选项,避免因强制SSL连接导致的请求失败。

完整配置示例:

access_key = 'XXXX'
secret_key = 'XXXXXXX'
sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", access_key)
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", secret_key)
sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "http://my-ip:9000")
sc._jsc.hadoopConfiguration().set("fs.s3a.path.style.access", "true")
sc._jsc.hadoopConfiguration().set("fs.s3a.connection.ssl.enabled", "false")

配置完成后重新执行创建数据库语句即可正常路由到Minio端点。


内容的提问来源于stack exchange,提问作者Wasim Reza Mallick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:05:23