创建 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.windows.net/<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 存储帐户

后续步骤