本文介绍如何在 Unity Catalog 中配置外部位置,以控制对 DBFS 根存储位置的访问。 尽管 Databricks 建议不要将数据存储在 DBFS 根存储中,但由于旧的做法,工作区可能会这样做。
外部位置是 Unity Catalog 安全对象,将存储凭证与云对象存储容器相关联。 外部位置用于定义托管表和卷的托管存储位置,并且控制对包含外部表和外部卷的存储位置的访问。
如果工作区本地、旧的 Azure Databricks Hive 元存储将数据存储在 DBFS 根中,你想要联合旧的 Hive 元存储,以便团队使用 Unity Catalog 处理 Hive 元存储表,则必须创建外部位置。 请参阅Hive 元存储联合:启用 Unity Catalog 来管理在 Hive 元存储中注册的表和为旧版工作区 Hive 元存储启用 Hive 元存储联合。
若要为 DBFS 根创建外部位置,必须在 Unity Catalog 中定义存储凭证,以便访问 DBFS 根的云存储位置。 如果还没有,系统可在创建外部位置的过程中为你创建一个。
权限要求:
必须具有元存储的
CREATE STORAGE CREDENTIAL
和CREATE EXTERNAL LOCATION
权限。 默认情况下,元存储管理员具有这些特权。备注
如果 DBFS 根存储位置的存储凭证已存在,则创建外部位置的用户不需要
CREATE STORAGE CREDENTIAL
,但确实在存储凭证和元存储上都需要有CREATE EXTERNAL LOCATION
。你必须是工作区管理员,才能让系统在外部位置创建过程中为你创建存储凭证。
如果提供对 DBFS 根存储位置的访问权限的存储凭证已存在,并且你在存储凭证和元存储上同时拥有
CREATE EXTERNAL LOCATION
,则不必是工作区管理员。
可以使用目录资源管理器为 DBFS 根创建外部位置。
在边栏中,单击
“目录”。
单击外部数据>和创建外部位置。
输入外部位置名称。
在 URL 下,单击“从 DBFS 挂载复制”,然后选择“从 DBFS 根复制”。
URL 和子路径字段使用 DBFS 根的云存储路径来填充。
重要
为 DBFS 根创建外部位置时,必须使用 DBFS 根位置的子路径,而不是整个存储桶的路径。 子路径已预先填充
user/hive/warehouse
,这是 Hive 元存储表的默认存储位置。 如果要对 DBFS 根中的数据进行更精细的访问控制,可为 DBFS 根中的子路径创建单独的外部位置。警告
DBFS 根可能存储在 Azure Blob 存储中,而不是 Azure Data Lake Storage Gen2 中。 可使用
wasb
驱动程序访问这些位置,不允许进行目录或文件级控制。 因此,Unity 目录只能在容器级别强制实施访问控制,这意味着,如果访问此外部位置的用户使用具有专用访问模式(以前是单用户访问模式)的计算资源,则可能会访问同一容器中的其他数据。 若要防止这种情况,请强制使用标准访问模式(以前共享访问模式)计算资源、SQL 仓库或无服务器计算。选择授予对 DBFS 根云存储位置访问权限的存储凭证;如果未定义任何存储凭证,请单击“+ 创建新存储凭证”。
要创建存储凭证,请选择“DBFS 根”的“凭证类型”。 保存外部位置时会自动创建存储凭证。
(可选)添加注释。
(可选)单击“高级选项”并启用“回退模式”。
回退模式适用于旧的工作负载迁移应用场景。 请参阅在外部位置启用回退模式。
单击 “创建” 。
转到“权限”选项卡,授予使用外部位置的权限。
- 单击“授予”。
- 选择“主体”字段中的用户、组或服务主体,然后选择要授予的特权。
- 单击“授予”。
(可选)设置可访问此外部位置的工作区。
默认情况下,可使用此 Unity Catalog 元存储的任何工作区上的用户有权访问此位置中的数据。 可将访问权限限制在特定工作区。 Databricks 建议限制对 DBFS 根所在工作区的访问。
请参阅将外部位置绑定到一个或多个工作区。