从 Azure Databricks 中的 ADLS Gen2 加载文件时出现间歇性 HTTP 错误

Intermittent HTTP error when loading files from ADLS Gen2 in Azure Databricks

当我尝试从 ADLS Gen2 加载 Azure Databricks 中的文件内容时,出现间歇性 HTTP 错误。存储帐户已使用与 Databricks 关联的服务主体安装,并已通过数据湖存储帐户上的 RBAC 获得 Storage Blob Data Contributor 访问权限。要加载的示例语句是

df = spark.read.format("orc").load("dbfs:/mnt/{storageaccount}/{filesystem}/{filename}")

我收到的错误信息是:

Py4JJavaError: 调用 o214.load 时出错。 : java.io.IOException: GET https://{storageaccount}.dfs.core.windows.net/{filesystem}/{filename}?timeout=90 StatusCode=412 StatusDescription=不满足使用 HTTP 条件 header(s) 指定的条件。
ErrorCode=ConditionNotMet ErrorMessage=不满足使用 HTTP 条件 header(s) 指定的条件。
RequestId:51fbfff7-d01f-002b-49aa-4c89d5000000
Time:2019-08-06T22:55:14.5585584Z

此错误并非与文件系统中的所有文件有关。我可以加载大部分文件。错误仅与某些文件有关。不确定这里的问题是什么。任何帮助将不胜感激。

我今天在一个文件上遇到了同样的问题。下载文件,将其从存储中删除并放回原处解决了问题。 试图重命名文件 -> 没有用。

编辑:我们在更多文件中有它,随机的。 我们通过将整个文件夹复制到一个新文件夹并将其重命名为原始文件夹来解决该问题。乔布斯 运行 再次没有问题。

问题依旧,为什么文件会变成这样?

同样的问题。经过一番研究,似乎可能是 http GET 请求中的 If-Match eTag 条件失败。 Microsoft 谈论他们将如何 return 发生这种情况时出现错误 412 post:https://azure.microsoft.com/de-de/blog/managing-concurrency-in-microsoft-azure-storage-2/

无论如何,Databricks 现在似乎已经解决了这个问题。

此问题现已解决。根本问题是由于 Microsoft 端的更改。这是我从 Microsoft 支持部门获得的 RCA:

在最新的存储租户升级过程中,有一个存储配置被错误地打开。这种类型的错误只会出现在最新升级的租户上启用命名空间的帐户中。这个问题的缓解方法是关闭特定租户的配置,我们已经开始为所有租户推出超音速配置。此后,我们为 ADLS Gen 2 添加了额外的存储升级验证,以帮助涵盖此类场景。