Criar um metastore Unity Catalog

Este artigo mostra como criar um metastore Unity Catalog e vinculá-lo ao workspace.

Importante

Para workspace que foram habilitados automaticamente para o Unity Catalog, as instruções neste artigo são desnecessárias. O Databricks começou a habilitar o novo workspace para o Unity Catalog automaticamente em 8 de novembro de 2023, com uma implementação gradual em todas account. Você deverá seguir as instruções nestes artigos somente se tiver um workspace e ainda não tiver um metastore na região do workspace. Para determinar se já existe um metastore em sua região, consulte Ativação automática do Unity Catalog.

Um metastore é o contêiner de nível superior para dados no Unity Catalog. Unity Catalog armazena metadados de registro sobre objetos protegidos (como tabelas, volumes, locais externos e compartilhamentos) e as permissões que controlam o acesso a eles. Cada metastore expõe um namespace de três níveis (catalog.schema.table) pelo qual os dados podem ser organizados. Você deve ter um metastore para cada região em que sua organização opera. Para trabalhar com o Unity Catalog, os usuários devem estar em um workspace anexado a um metastore em sua região.

Para criar um metastore, faça o seguinte:

  1. Na sua account da AWS, opcionalmente, crie um local de armazenamento para armazenamento em nível de metastore para gerenciar tabelas e volumes.

    Para obter informações que o ajudem a decidir se você precisa de armazenamento no nível do metastore, consulte (Opcional) Criar armazenamento no nível do metastore e Os dados são fisicamente separados no armazenamento.

  2. Na sua account AWS, crie uma IAM role que dê acesso a esse local de armazenamento.

  3. No Databricks, crie o metastore, anexando o local de armazenamento e atribua workspace ao metastore.

Observação

Além das abordagens descritas neste artigo, você também pode criar um metastore usando o provedor Databricks Terraform, especificamente o recurso databricks_metastore . Para permitir que o Unity Catalog acesse o metastore, use databricks_metastore_data_access. Para vincular workspace a um metastore, use databricks_metastore_assignment.

Antes de começar

Antes de começar, você deve se familiarizar com os conceitos básicos do Catálogo do Unity, incluindo metastores e gerenciamento de armazenamento. Consulte O que é Unity Catalog?.

Você também deve confirmar se atende aos seguintes requisitos para todos os passos de configuração:

  • Você deve ser um administrador account do Databricks.

  • Sua account Databricks deve estar no plano Premium ou acima.

  • Se quiser configurar o armazenamento raiz no nível do metastore, você deverá ter a capacidade de criar buckets S3, IAM role, políticas IAM e relações de confiança entreaccount em sua account AWS.

o passo 1 (opcional): Crie um bucket S3 para gerenciamento de armazenamento em nível de metastore na AWS

Nesta etapa, que é opcional, você cria o bucket S3 exigido pelo Unity Catalog para armazenar dados de gerenciamento de tabela e volume no nível do metastore. Você cria o bucket S3 em sua própria account AWS. Para determinar se você precisa de armazenamento no nível do metastore, consulte (Opcional) Criar armazenamento no nível do metastore.

  1. Na AWS, crie um bucket S3.

    Esse bucket S3 será o local de armazenamento em nível de metastore para gerenciar tabelas e gerenciar volumes em Unity Catalog. Esse local de armazenamento pode ser substituído nos níveis do catálogo e do esquema. Consulte Especificar um local de armazenamento gerenciar em Unity Catalog

    Requisitos:

    • Se você tiver mais de um metastore, deverá usar um bucket S3 dedicado para cada um.

    • Localize o bucket na mesma região do workspace do qual você deseja acessar os dados.

    • O nome do depósito não pode conter notação de ponto (por exemplo, incorrect.bucket.name.notation). Para obter mais orientações sobre nomenclatura de buckets, consulte as regras de nomenclatura de buckets da AWS.

  2. Anote o caminho do bucket S3, que começa com s3://.

  3. Se você habilitar a criptografia KMS no bucket S3, anote o nome da key de criptografia KMS .

o passo 2 (Opcional): Crie uma IAM role para acessar o local de armazenamento

Nesta etapa, que é necessária apenas se você concluiu a etapa 1, você cria a IAM role exigida pelo Unity Catalog para acessar o bucket S3 que você criou na etapa anterior.

A criação de função é um processo de duas etapas. Primeiro, você simplesmente cria a função, adicionando uma política de relacionamento de confiança temporária que você modifica posteriormente. Você deve modificar a política de confiança depois de criar a função porque sua função deve ser auto-assumida, ou seja, deve ser configurada para confiar em si mesma. A função deve, portanto, existir antes de você adicionar a declaração de autossuposição. Para obter informações sobre papéis autoassumidos, consulte os artigos do blog da Amazon.

  1. Encontre o ID da sua account do Databricks.

    1. Faça logon no console da conta do Databricks.

    2. Clique no seu nome de usuário.

    3. No menu, copie o valor da ID da conta.

  2. Na AWS, crie uma IAM role com uma política de confiança personalizada.

  3. No campo Política de confiança personalizada, cole o JSON da política a seguir, substituindo <DATABRICKS-ACCOUNT-ID> pela ID da conta do Databricks que você encontrou na passo 1 (não a ID da sua conta da AWS).

    Esta política estabelece uma relação de confiança entreaccount para que Unity Catalog possa assumir a função de acessar os dados no bucket em nome dos usuários do Databricks. Isso é especificado pelo ARN na seção Principal . É um valor estático que faz referência a uma função criada pelo Databricks. Não o modifique.

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Principal": {
          "AWS": [
            "arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL"
          ]
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "<DATABRICKS-ACCOUNT-ID>"
          }
        }
      }]
    }
    

    Se o senhor estiver usando o AWS GovCloud, use a política abaixo:

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Principal": {
          "AWS": [
        "arn:aws-us-gov:iam::044793339203:role/unity-catalog-prod-UCMasterRole-1QRFA8SGY15OJ"
          ]
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "<DATABRICKS-ACCOUNT-ID>"
          }
        }
      }]
    }
    
  4. Ignore a configuração da política de permissões. Você voltará para adicioná-lo em uma passo posterior.

  5. Salve a IAM role.

  6. Modifique a política de relacionamento de confiança para torná-la “autossuposta”.

    1. Retorne à sua IAM role salva e vá para a guia Relações de confiança .

    2. Edite a política de relação de confiança, adicionando o seguinte ARN à instrução “Permitir”.

      Substitua <YOUR-AWS-ACCOUNT-ID> e <THIS-ROLE-NAME> por seus valores reais de IAM role.

      "arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>"
      

    Sua política agora deve ter esta aparência (com o texto de substituição atualizado para usar o ID da conta do Databricks e os valores de IAM role):

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": [
              "arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL",
              "arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>"
             ]
          },
          "Action": "sts:AssumeRole",
          "Condition": {
            "StringEquals": {
              "sts:ExternalId": "<DATABRICKS-ACCOUNT-ID>"
            }
          }
        }
      ]
    }
    
  7. Na AWS, crie uma política IAM na mesma account da AWS que o bucket S3.

    Para evitar problemas inesperados, você deve usar a política de amostra a seguir, substituindo os seguintes valores:

    • <BUCKET>: o nome do bucket do S3 que você criou na passo anterior.

    • <KMS-KEY>: Opcional. Se a criptografia estiver habilitada, informe o nome da chave KMS que criptografa o conteúdo do bucket do S3. Se a criptografia estiver desabilitada, remova toda a seção KMS da política IAM.

    • <AWS-ACCOUNT-ID>: o ID da conta atual da AWS (não da sua conta do Databricks).

    • <AWS-IAM-ROLE-NAME>: nome da função AWS IAM que você criou na passo anterior.

    {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Action": [
                 "s3:GetObject",
                 "s3:PutObject",
                 "s3:DeleteObject",
                 "s3:ListBucket",
                 "s3:GetBucketLocation"
             ],
             "Resource": [
                 "arn:aws:s3:::<BUCKET>/*",
                 "arn:aws:s3:::<BUCKET>"
             ],
             "Effect": "Allow"
         },
         {
             "Action": [
                 "kms:Decrypt",
                 "kms:Encrypt",
                 "kms:GenerateDataKey*"
             ],
             "Resource": [
                 "arn:aws:kms:<KMS-KEY>"
             ],
             "Effect": "Allow"
         },
         {
             "Action": [
                 "sts:AssumeRole"
             ],
             "Resource": [
                 "arn:aws:iam::<AWS-ACCOUNT-ID>:role/<AWS-IAM-ROLE-NAME>"
             ],
             "Effect": "Allow"
         }
       ]
    }
    

    Observação

    Se você precisar de uma política IAM mais restritiva para o Unity Catalog, entre em contato com o representante da Databricks para receber ajuda.

  8. Anexe a política do IAM à IAM role.

    Na IAM role Permissões da tab, anexe a política do IAM que você acabou de criar.

o passo 3: Crie o metastore e anexe um espaço de trabalho

Cada região do Databricks requer seu próprio metastore Unity Catalog .

O senhor cria um metastore para cada região em que sua organização opera. O senhor pode vincular cada um desses metastores regionais a qualquer número de espaços de trabalho nessa região. Cada workspace vinculado tem o mesmo view dos dados no metastore, e o controle de acesso aos dados pode ser gerenciado em todo o espaço de trabalho. O senhor pode acessar dados em outros metastores usando o Delta Sharing.

Se você optar por criar armazenamento em nível de metastore, o metastore usará o bucket S3 e IAM role que você criou nas etapas anteriores.

Para criar um metastore:

  1. Entre no console da contado Databricks.

  2. Clique em Ícone de catálogo Catalog.

  3. Clique em Create metastore (Criar metastore).

  4. Digite o seguinte:

    • Um nome para o metastore.

    • A região onde você deseja implantar o metastore.

      Isso deve estar na mesma região que os espaços de trabalho que você deseja usar para acessar os dados. É importante que isso corresponda à região do depósito de armazenamento que você criou anteriormente.

    • (Opcional) O caminho do bucket S3 (você pode omitir s3://) e o nome IAM role para o bucket e a função que você criou na etapa 1 (Opcional): Crie um bucket S3 para gerenciar o armazenamento em nível de metastore na AWS.

  5. Clique em Criar.

  6. Quando solicitado, selecione workspace para vincular ao metastore.

    Para obter detalhes, consulte Habilitar um workspace para o Unity Catalog.

  7. Transfira a função de administrador do metastore para um grupo.

    O usuário que cria um metastore é seu proprietário, também chamado de administrador do metastore. O administrador do metastore pode criar objetos de nível superior no metastore, como catálogos, e pode gerenciar o acesso a tabelas e outros objetos. A Databricks recomenda que você reatribua a função de administrador do metastore a um grupo. Consulte Atribuir um administrador de metastore.

  8. Habilite o gerenciamento do Databricks de upload para gerenciar volumes.

    Databricks usa CORS (cross-origin recurso compartilhamento) para upload dados para gerenciar volumes em Unity Catalog. Consulte Configurar o armazenamento Unity Catalog account para CORS.