本文介绍如何在 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 Catalog 只能在容器级别强制实施访问控制,这意味着,如果访问此外部位置的用户使用具有单个用户访问模式的群集,可能会访问同一容器中的其他数据。 若要防止这种情况,请强制使用共享访问模式群集、SQL 仓库或无服务器计算。选择授予对 DBFS 根云存储位置访问权限的存储凭证;如果未定义任何存储凭证,请单击“+ 创建新存储凭证”。
要创建存储凭证,请选择“DBFS 根”的“凭证类型”。 保存外部位置时会自动创建存储凭证。
(可选)添加注释。
(可选)单击“高级选项”并启用“回退模式”。
回退模式适用于旧的工作负载迁移应用场景。 请参阅在外部位置启用回退模式。
单击 “创建” 。
转到“权限”选项卡,授予使用外部位置的权限。
- 单击“授予”。
- 选择“主体”字段中的用户、组或服务主体,然后选择要授予的特权。
- 单击“授予”。
(可选)设置可访问此外部位置的工作区。
默认情况下,可使用此 Unity Catalog 元存储的任何工作区上的用户有权访问此位置中的数据。 可将访问权限限制在特定工作区。 Databricks 建议限制对 DBFS 根所在工作区的访问。
请参阅将外部位置绑定到一个或多个工作区。