本文介绍已启用分层命名空间功能的帐户Azure Data Lake Storage的已知问题和限制。 使用此信息来管理数据工作流,并在使用各种 API 和集成时避免潜在的陷阱。
注意
在启用了网络文件系统 (NFS) 3.0 支持的帐户中,本文中介绍的某些功能可能不受支持。 若要查看一个在启用各种功能时会显示功能支持影响的表,请参阅 Azure 存储帐户中的 Blob 存储功能支持。
功能、服务和平台支持
具有分层命名空间的帐户支持大多数 Blob 存储功能、Azure服务集成和开源平台。 有关完整列表,请参阅:
- Azure Data Lake Storage中提供的Blob 存储功能
- 支持 Azure Data Lake Storage 的 Azure 服务
- 支持Azure Data Lake Storage的开源平台
Blob 存储 API
Data Lake Storage API、NFS 3.0 和 Blob API 可以对相同的数据进行操作。
本节介绍使用 blob API、NFS 3.0 和 Data Lake Storage API 对相同数据进行操作的问题和限制。
不能同时使用 Blob API、NFS 3.0 和 Data Lake Storage API 向同一个文件实例写入。 如果使用 Data Lake Storage API 或 NFS 3.0 将数据写入文件,则调用 Get Block List Blob API 时无法看到该文件的块。 唯一的例外情况是进行覆盖时。 您可以通过 API,或使用带零截断选项的 NFS 3.0,覆盖文件或 Blob 对象(即一种 POSIX 风格的操作,会在写入前先将文件截断为零字节)。
不能使用 PutBlock 或 PutBlockList 操作覆盖通过 Data Lake Storage 操作(例如 Path - Create 操作)创建的 Blob。 但是,可以使用 PutBlob 操作覆盖这些 Blob,但受 PutBlob 所用相应 API 版本允许的 Blob 最大大小限制。
如果在不指定分隔符的情况下使用列出 Blob 操作,则结果会同时包括目录和 blob。 如果选择使用分隔符,请只使用正斜杠 (
/)。 这是唯一支持的分隔符。如果使用 “删除 Blob API”删除 目录,则仅当目录为空时,才会删除该目录。 此条件意味着不能使用 Blob API 以递归方式删除目录。
这些 Blob REST API 不受支持:
具有分层命名空间的帐户不支持非托管 VM 磁盘。 若要在存储帐户中启用分层命名空间,请将非托管 VM 磁盘置于未启用分层命名空间功能的存储帐户中。
支持在Azure Data Lake Storage以递归方式设置访问控制列表(ACL)
将 ACL 更改以递归方式从父目录应用到子项的功能已正式发布。 在此功能的当前版本中,可以使用 Azure 存储资源管理器、PowerShell、Azure CLI 和 .NET、Java、Python 和 Node.js SDK 应用 ACL 更改。 Azure 门户中尚未提供此支持。
访问控制列表 (ACL) 和匿名读取访问
如果向容器授予 匿名读取访问权限 ,则 ACL 对该容器或该容器中的文件没有影响。 此限制仅影响读取请求。 写入请求仍遵循 ACL。 要求对所有 Blob 数据请求进行授权。
Azure Data Lake Storage 的专用终结点
如果使用专用终结点访问Azure Data Lake Storage(启用了分层命名空间的存储帐户),则需要为 blob 和 dfs 子资源创建一个。 面向Data Lake Storage(dfs)终结点的操作可以重定向到 Blob 终结点,某些操作(例如管理 ACL、创建目录和删除目录)需要 DFS 专用终结点。 为这两个子资源创建专用终结点可确保所有操作都成功完成。 有关详细信息,请参阅对 Azure 存储使用专用端点。
AzCopy 与 Azure Data Lake Storage 配合使用
将AzCopy用于启用了分层命名空间的帐户时,只有 AzCopy v10 支持所需的Data Lake Storage API。 仅使用最新版本的 AzCopy (AzCopy v10)。 不支持早期版本(如 AzCopy v8.1)。
Azure Data Lake Storage 中的 Azure 存储资源管理器
将Azure 存储资源管理器用于启用了分层命名空间的存储帐户时,请仅使用版本1.6.0或更高版本。 早期版本不支持管理文件和目录所需的分层命名空间 API。
Azure 门户中的存储浏览器
在 Azure 门户中显示的存储浏览器中,无法通过指定路径来访问文件或文件夹。 而是必须浏览文件夹才能找到文件。 因此,如果 ACL 授予用户对文件读取访问权限,但不授予对文件前所有文件夹的读取访问权限,则用户无法在存储浏览器中查看该文件。
第三方应用程序
使用 REST API 进行工作的第三方应用程序可以在Data Lake Storage中使用它们时继续工作。 调用 Blob API 的应用程序可能正常工作。
Windows Azure Blob 存储 (WASB) 驱动程序
目前,WASB 驱动程序设计为仅用于 Blob API,在一些常见场景中会遇到问题。 具体而言,当客户端连接到启用了分层命名空间的存储帐户时。 Data Lake Storage上的多协议访问不会缓解这些问题。
不支持将 WASB 驱动程序用作启用了分层命名空间的存储帐户的客户端。 而是在 Hadoop 环境中使用 Azure Blob 文件系统 (ABFS) 驱动程序。 如果您正尝试从版本早于 Hadoop branch-3 的本地部署 Hadoop 环境迁出,请提交 Azure 支持工单,以获取帮助来确定适合贵组织的后续迁移路径。
Azure Data Lake Storage 中 Blob 的软删除
在具有分层命名空间的存储帐户中,如果重命名软删除文件或目录的父目录,Azure门户可能无法正确显示软删除的项目。 在这种情况下,请使用 PowerShell 或Azure CLI列出和还原软删除的项。
Azure Data Lake Storage中的事件订阅
在具有分层命名空间的存储帐户中,如果帐户具有事件订阅,则辅助终结点(异地冗余存储帐户中的只读副本)上的读取操作会导致错误。 若要解决此问题,请删除事件订阅。 对启用了非分层命名空间的帐户使用Data Lake Storage终结点(abfss://URI)不会生成事件,但 blob 终结点(wasb:// URI)会生成事件。
提示
只有在启用读取访问异地冗余存储 (RA-GRS) 或读取访问异地区域冗余存储 (RA-GZRS) 的情况下,才可对辅助终结点进行读取访问。