Unity Catalog Databricks写入S3报错“Filesystem not supported by this committer”
问题:Unity Catalog环境下Databricks写入S3触发PathCommitException
在启用Unity Catalog的Databricks环境中,尝试向S3写入文件时触发以下错误:
Caused by: org.apache.hadoop.fs.s3a.commit.PathCommitException: `s3a://shared/export/databricks.txt': Filesystem not supported by this committer at org.apache.hadoop.fs.s3a.commit.AbstractS3ACommitterFactory.createOutputCommitter(AbstractS3ACommitterFactory.java:51) at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.getOutputCommitter(FileOutputFormat.java:338) at org.apache.spark.internal.io.HadoopMapReduceCommitProtocol.setupCommitter(HadoopMapReduceCommitProtocol.scala:116) at org.apache.spark.internal.io.HadoopMapReduceCommitProtocol.setupJob(HadoopMapReduceCommitProtocol.scala:195) at org.apache.spark.internal.io.SparkHadoopWriter$.write(SparkHadoopWriter.scala:83) at org.apache.spark.rdd.PairRDDFunctions.$anonfun$saveAsNewAPIHadoopDataset$1(PairRDDFunctions.scala:1077) at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
已在集群「高级选项->Spark配置」中添加配置:spark.hadoop.fs.s3a.impl org.apache.hadoop.fs.s3a.S3AFileSystem
但日志显示实际使用的文件系统为com.databricks.sql.acl.fs.CredentialScopeFileSystem,原配置的S3AFileSystem被标记为旧实现:
22.04.2024 08:21:23 [INFO] fs.s3a.impl=com.databricks.sql.acl.fs.CredentialScopeFileSystem 22.04.2024 08:21:23 [INFO] fs.s3a.impl.disable.cache=true 22.04.2024 08:21:23 [INFO] fs.s3a.impl.disable.cache.old=true 22.04.2024 08:21:23 [INFO] fs.s3a.impl.old=org.apache.hadoop.fs.s3a.S3AFileSystem
原因分析
- Unity Catalog强制替换文件系统实现:启用Unity Catalog后,Databricks会自动将S3文件系统实现替换为
CredentialScopeFileSystem,这是Databricks为Unity Catalog定制的权限管控包装类,用于统一管理数据访问的凭据与权限校验。 - 手动配置被内部逻辑覆盖:你添加的
spark.hadoop.fs.s3a.impl配置会被Databricks的内部初始化逻辑覆盖,原生Hadoop的S3AFileSystem会被标记为fs.s3a.impl.old,实际运行时使用的是定制的文件系统类。 - 提交器适配性问题:错误中的
PathCommitException是因为Hadoop原生的S3A提交器仅支持S3AFileSystem,无法识别Databricks定制的CredentialScopeFileSystem,导致写入时的提交流程失败。
内容的提问来源于stack exchange,提问作者Đức Thiện Trần
相关产品推荐
相关产品推荐

