Azure Databricks 创建的 Azure ADLS Gen2 文件不继承 ACL

问题描述 投票:0回答:2

我有一个 databricks 笔记本,正在将数据帧写入 ADLS Gen2 存储中的文件。

它创建一个临时文件夹,输出文件,然后将该文件复制到永久文件夹。由于某种原因,该文件无法正确继承 ACL。它创建的文件夹具有正确的 ACL。

笔记本的代码:

#Get data into dataframe
df_export = spark.sql(SQL)

# OUTPUT file to temp directory coalesce(1) creates a single output data file
(df_export.coalesce(1).write.format("parquet")
.mode("overwrite")
.save(TempFolder))

#get the parquet file name.  It's always the last in the folder as the other files are created starting with _
file = dbutils.fs.ls(TempFolder)[-1][0]

#create permanent copy
dbutils.fs.cp(file,FullPath)

创建的临时文件夹显示相关帐户的以下内容。

文件显示以下内容。

还有口罩。我对面具不太熟悉,所以不确定这有什么不同。

显示文件夹的屏蔽权限

在文件上显示为

有谁知道为什么这不会从父文件夹继承 ACL?

acl azure-databricks azure-data-lake-gen2
2个回答
4
投票

我已收到 Microsoft 支持人员的回复,它已为我解决了此问题。

原因:Databricks 存储的文件将服务主体作为具有权限 -rw-r--r-- 的文件的所有者,从而强制 ADLS 中其余批处理用户的有效权限从 rwx(目录权限)到 r--,这进而导致工作失败

解决方案:要解决此问题,我们需要将 Databricks 端的默认掩码 (022) 更改为自定义掩码 (000)。您可以在集群配置下的 Spark 配置设置中设置以下内容:spark.hadoop.fs.permissions.umask-mode 000


2
投票

哇,太棒了!我正在寻找解决方案。直通身份验证现在可能是一个合适的解决方案。

我感觉它是这个古老的 hadoop bug 的一部分: https://issues.apache.org/jira/browse/HDFS-6962(在hadoop-3中解决,现在是spark 3+的一部分)。

Spark 在移动文件后尝试设置 ACL,但失败。首先,文件是在 tmp 目录中的其他位置创建的。 tmp-dir 权限默认由 adls-behaviour 继承。

© www.soinside.com 2019 - 2024. All rights reserved.