创建 Unity Catalog 元存储

本文介绍如何创建 Unity Catalog 元存储并将其链接到工作区。

重要

对于自动启用了 Unity Catalog 的工作区,本文中的说明是不必要的。 Databricks 于 2023 年 11 月 9 日自动为 Unity Catalog 启用了新工作区,并逐步跨帐户推出。 仅当你有一个工作区并且工作区区域中尚未有元存储时,才必须按照本文中的说明进行操作。 若要确定区域中是否已存在元存储,请参阅自动启用 Unity Catalog

元存储是 Unity Catalog 中数据的顶级容器。 Unity Catalog 元存储会注册有关安全对象(例如表、卷、外部位置和共享)及其访问管理权限的元存储。 每个元存储公开一个三级命名空间 (catalog.schema.table),可在该命名空间组织数据。 你必须对组织在其中操作的每个区域具有一个元存储。 若要使用 Unity Catalog,用户必须位于附加到其区域中元存储的工作区上。

若要创建元存储,请执行以下操作:

  1. 在 Azure 帐户中,选择性地为托管表和卷的元存储级别存储创建存储位置。

    有关有助于你确定是否需要元存储级存储的信息,请参阅(可选)创建元存储级别存储数据在存储中物理分隔

  2. 在 Azure 帐户中,创建一个允许访问该存储位置的 Azure 托管标识或服务主体。

  3. 在 Azure Databricks 中,创建元存储、附加存储位置,并将工作区分配给元存储。

注意

除了本文中介绍的方法之外,还可以使用 Databricks Terraform 提供程序(特别是 databricks_metastore 资源)来创建元存储。 若要使 Unity Catalog 能够访问元存储,请使用 databricks_metastore_data_access。 若要将工作区链接到元存储,请使用 databricks_metastore_assignment

开始之前

在开始之前,应熟悉基本的 Unity Catalog 概念,包括元存储和托管存储。 请参阅什么是 Unity Catalog?

还应确认满足所有设置步骤的以下要求:

  • 你必须是 Azure Databricks 帐户管理员。

    第一个 Azure Databricks 帐户管理员在首次登录 Azure Databricks 帐户控制台时必须是 Microsoft Entra ID 全局管理员。 首次登录时,该用户将成为 Azure Databricks 帐户管理员,并且不再需要使用 Microsoft Entra ID 全局管理员角色来访问 Azure Databricks 帐户。 第一个帐户管理员可以将 Microsoft Entra ID 租户中的用户分配为其他帐户管理员(他们可以自行分配更多的帐户管理员)。 其他帐户管理员不需要 Microsoft Entra ID 中的特定角色。

  • 附加到元存储的工作区必须位于 Azure Databricks 高级计划中

  • 若要设置元存储级根存储,你必须有权在 Azure 租户中创建以下内容:

步骤 1(可选):为元存储级别托管存储创建存储容器

在此可选步骤中,你将创建一个存储帐户和容器,用于在元存储级别存储托管表和卷数据。 若要确定是否需要元存储级别存储,请参阅(可选)创建元存储级别存储

  1. 为 Azure Data Lake Storage Gen2 创建存储帐户。

    此存储帐户将包含 Unity Catalog 托管表和卷。 它必须是 Azure Databricks 工作区所在区域中的 Azure Data Lake Storage Gen2 帐户。 请参阅创建用于 Azure Data Lake Storage Gen2 的存储帐户

  2. 创建一个存储容器,用于在元存储级别保存托管表和卷数据。

    在每个区域只能创建一个元存储。 必须为元存储和存储容器使用相同的区域。

    可以在目录和架构级别重写此元存储级别存储位置。 请参阅在 Unity Catalog 中指定托管存储位置

    记下容器的 ADLSv2 URI,其格式如下:

    abfss://<container-name>@<storage-account-name>.dfs.core.chinacloudapi.cn/<metastore-name>
    

    在后续步骤中,将 <storage-container> 替换为此 URI。

步骤 2(可选):创建托管标识以访问托管存储位置

只有在完成步骤 1 后才需要执行此步骤。在此步骤中,你将创建一个 Azure Databricks 访问连接器来保存托管标识,并向它授予访问存储容器的权限。

按照使用 Unity Catalog 中的 Azure 托管标识访问存储中的说明进行操作。

注意

可以使用 Azure 托管标识或服务主体作为提供对元存储的存储容器的访问权限的标识。 Databricks 强烈建议使用托管标识,因为它们不需要维护凭据或轮换机密,并且允许连接到受存储防火墙保护的 Azure Data Lake Storage Gen2 帐户。 如果要使用服务主体,请参阅使用服务主体(旧版)创建 Unity Catalog 托管存储

步骤 3:创建元存储并附加工作区

每个 Azure Databricks 区域都需要自己的 Unity Catalog 元存储。

你需要为组织在其中操作的每个区域创建一个元存储。 可以将其中每个区域元存储链接到该区域中任意数量的工作区。 每个链接的工作区对元存储中的数据具有相同的视图,并且可以跨工作区管理数据访问控制。 可以使用 Delta Sharing 访问其他元存储中的数据。

如果选择创建元存储级别存储,那么元存储将使用你在先前步骤中创建的存储容器和 Azure 托管标识。

创建元存储:

  1. 如果选择创建元存储级别存储,请确保你拥有存储容器的路径,还具有你在上一个任务中创建的 Azure Databricks 访问连接器的资源 ID。

  2. 以帐户管理员身份登录到工作区。

  3. 单击 Azure Databricks 工作区顶部栏中的用户名,然后选择“管理帐户”。

  4. 登录到 Azure Databricks 帐户控制台。

  5. 单击 目录图标目录”。

  6. 单击“创建元存储”。

  7. 输入以下内容:

    • 元存储的名称。

    • 将在其中部署元存储的区域。

      此区域必须是要用于访问数据的工作区所在的区域。 如果选择为元存储级别存储创建存储容器,则该区域也必须是相同的。

    • (可选)ADLS Gen 2 路径:输入将用作元存储的根存储的存储容器的路径。

      前缀 abfss:// 会自动添加。

    • (可选)访问连接器 ID:按以下格式输入 Azure Databricks 访问连接器的资源 ID:

      /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
      
  8. 单击 “创建”

  9. 出现提示时,选择工作区以链接到元存储。

    有关详细信息,请参阅为工作区启用 Unity Catalog

  10. 将元存储管理员角色传输到组。

    创建元存储的用户是其所有者,也称为元存储管理员。元存储管理员可以在元存储中创建顶级对象(如目录),并且可以管理对表和其他对象的访问权限。 Databricks 建议将元存储管理员角色重新分配给组。 请参阅分配元存储管理员

  11. 启用对托管卷的 Azure Databricks 上传管理。

    Azure Databricks 使用跨源资源共享 (CORS) 将数据上传到 Unity Catalog 中的托管卷。 请参阅为 CORS 配置 Unity Catalog 存储帐户

后续步骤

将托管存储添加到现有元存储

元存储级托管存储是可选的,对于自动创建的元存储,将不包含该托管存储。 如果希望使用数据隔离模型来为多个工作区集中存储数据,可能需要将元存储级别存储添加到元存储。 如果你要使用 Delta Sharing 共享笔记本,或者如果你是使用个人暂存位置的 Azure Databricks 合作伙伴,则需要元存储级别的存储。

还可以参阅在 Unity Catalog 中指定托管存储位置

要求

  • 必须至少有一个工作区附加到 Unity Catalog 元存储。
  • 所需的 Azure Databricks 权限:
    • 若要创建外部位置,你必须是元存储管理员或具有 CREATE EXTERNAL LOCATIONCREATE STORAGE CREDENTIAL 权限的用户。
    • 若要将存储位置添加到元存储定义,你必须是帐户管理员。若要了解如何在帐户中启用帐户管理员角色,请参阅建立第一个帐户管理员
  • 所需的 Azure 租户权限:
    • 创建用于 Azure Data Lake Storage Gen2 的存储帐户的权限。 此存储帐户必须有分层命名空间。 请参阅创建用于 Azure Data Lake Storage Gen2 的存储帐户
    • 创建用于保存系统分配的托管标识的新资源的权限。 这要求你是租户中任何订阅中的资源组的参与者或所有者。

步骤 1:创建存储位置

按照步骤 1(可选):为元存储级托管存储创建存储容器步骤 2(可选):创建托管标识以访问托管存储位置中的说明,在 Azure Data Lake Storage Gen2 中创建一个存储容器,并创建一个 Azure Databricks 访问连接器来保存有权访问存储容器的托管标识。

步骤 2:在 Unity Catalog 中创建外部位置

在此步骤中,你将在 Unity Catalog 中创建一个外部位置,该位置引用你刚刚创建的 ADLS Gen 2 路径。

  1. 创建存储凭据。

    存储凭据将表示在步骤 1:创建存储位置中创建的 Azure 托管标识。

    按照创建存储凭据以连接到 Azure Data Lake Storage Gen2 中的说明操作。

  2. 创建一个外部位置,该位置引用在上一步中创建的存储凭据和在步骤 1:创建存储位置中创建的 ADLS Gen 2 存储容器。

    按照创建外部位置以将云存储连接到 Azure Databricks 中的说明操作

  3. 向自己授予对外部位置的 CREATE MANAGED STORAGE 权限。

    1. 单击外部位置名称以打开详细信息窗格。
    2. 在“权限”选项卡上,单击“授权”。
    3. 在“在 <external location> 上授予”对话框中,在“主体”字段中选择你自己,然后选择“CREATE MANAGED STORAGE”。
    4. 单击“授予”

步骤 3:将存储位置添加到元存储

创建表示元存储存储桶的外部位置后,可以将其添加到元存储。

  1. 作为帐户管理员,登录到帐户控制台

  2. 单击 目录图标“目录”

  3. 单击元存储名称。

  4. 确认你是元存储管理员。

    如果你不是,请单击“编辑”,并将你自己分配为元存储管理员。完成此过程后,可以取消分配你自己。

  5. 在“配置”选项卡上,在“ADLS Gen 2 路径”旁边单击“设置”。

  6. 在“设置元存储根”对话框中,输入用于创建外部位置的 ADLS Gen 2 路径,然后单击“更新”。

    此路径一旦设置便无法修改。

删除元存储

如果要关闭 Azure Databricks 帐户,或者有其他原因需要删除对 Unity Catalog 元存储管理的数据的访问权限,则可以删除该元存储。

警告

使用 Azure Databricks 工作区时,由元存储管理的所有对象都将变得不可访问。 此操作不可撤消。

托管表数据和元数据将在 30 天后自动删除。 云存储中的外部表数据不受元存储删除的影响。

删除元存储:

  1. 作为元存储管理员,登录到帐户控制台
  2. 单击 目录图标目录”。
  3. 单击元存储名称。
  4. 在“配置”选项卡上,单击右上角的三个按钮菜单,然后选择“删除”。
  5. 在确认对话框中,输入元存储的名称,然后单击“删除”。