Configurar o Lakehouse entre nuvens para o Databricks Unity Catalog

Neste documento, descrevemos como configurar um lakehouse entre nuvens para consultar dados de um catálogo do Databricks Unity Catalog diretamente noGoogle Cloud. Essa capacidade unifica a análise de dados ao integrar suas fontes de dados externas ao ambienteGoogle Cloud atual.

Depois, use o Lakehouse para Apache Iceberg para gerenciar o acesso aos seus dados federados.

Antes de começar

  1. Leia a visão geral do Lakehouse para entender como ele gerencia o acesso aos dados.
  2. Leia Sobre o Lakehouse entre nuvens para entender como ele funciona.
  3. Revise os catálogos compatíveis para verificar os requisitos de local externo e as configurações aceitas.
  4. Entenda como usar secrets regionais do Secret Manager. Isso é necessário para configurar um data lakehouse entre nuvens com o Unity Catalog do Databricks.
  5. Gere um principal de serviço OAuth (ID e chave secreta do cliente) no provedor de catálogo remoto com acesso de leitura ao catálogo de destino. Esse processo está fora do escopo desta documentação.
  6. Opcional: se você planeja rotear consultas por uma interconexão particular entre sua Google Cloud VPC e a VPC do provedor de nuvem remota (por exemplo, AWS), verifique se você tem uma conta ativa com o provedor remoto, provisione uma interconexão entre nuvens ou Partner Interconnect, estabeleça sessões do BGP com o Cloud Router e verifique se você tem as permissões necessárias do IAM nos dois ambientes de nuvem.
  7. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  8. Verify that billing is enabled for your Google Cloud project.

  9. Enable the BigLake, Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  10. Verify that billing is enabled for your Google Cloud project.

  11. Enable the BigLake, Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Funções exigidas

Para receber as permissões necessárias para configurar o Lakehouse entre nuvens, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

  • Gerenciar catálogos do Lakehouse: Administrador do BigLake (roles/biglake.admin)
  • Gerenciar secrets: Administrador do Secret Manager (roles/secretmanager.admin)
  • Fazer o roteamento do tráfego por interconexão particular: Administrador de rede do Compute (roles/compute.networkAdmin), leitor do Service Directory (roles/servicedirectory.viewer) e serviço autorizado do PSC do Service Directory (roles/servicedirectory.pscAuthorizedService)

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Detalhes do catálogo compatíveis

Este guia fornece instruções para configurar um Lakehouse entre nuvens com um catálogo do Databricks Unity Catalog na Amazon Web Services (AWS) ou no Google Cloud. Para informações detalhadas sobre requisitos de local externo e configurações compatíveis, consulte Catálogos compatíveis.

Limitações e considerações

Nesta seção, listamos as limitações e considerações para usar o Lakehouse entre nuvens.

  • Provedores de nuvem compatíveis:é possível usar uma interconexão particular com seu Lakehouse entre nuvens com os seguintes provedores de nuvem remotos: Amazon Web Services (AWS). Use uma interconexão entre nuvens ou uma interconexão por parceiro.
  • Somente os catálogos do Unity Catalog do Databricks que usam um local externo na AWS ou um local externo no Google Cloud são compatíveis. Os catálogos do Unity Catalog que usam o armazenamento padrão na AWS ou o armazenamento padrão no Google Cloud não são compatíveis.
  • É necessário ativar o acesso aos dados externos no metastore usado pelo Unity Catalog, que fica desativado por padrão.
  • Roteamento de rede:se uma interconexão particular (como CCI de propriedade do cliente ou Interconexão por parceiro) não estiver configurada, as consultas serão roteadas pela Internet pública. Isso pode resultar em taxas de saída mais altas do seu provedor de nuvem remota e em uma performance menos previsível.
  • Atualização de dados:a flag --refresh-interval para o catálogo federado determina a frequência com que os metadados são sincronizados. Um intervalo menor fornece dados mais recentes, mas pode gerar custos adicionais de API do provedor de catálogo remoto.
  • Relatórios de métricas do Iceberg:o Relatório de métricas do Iceberg não está disponível para catálogos federados. Defina a propriedade rest-metrics-reporting-enabled como false no cliente do Iceberg ao acessar um catálogo federado.

Fluxo de trabalho geral

Para configurar e usar o Lakehouse entre nuvens, siga estas etapas gerais:

  • Configure o Cross-Cloud Interconnect (opcional): configure uma conexão privada entre a Google Cloud VPC e o provedor de nuvem remota.
  • Configurar a federação:crie um secret no Secret Manager com suas credenciais de catálogo remoto. Em seguida, crie um catálogo federado no Lakehouse e conceda acesso ao secret.
  • Verifique a conexão:confira se o Lakehouse consegue se conectar ao catálogo remoto.
  • Consultar dados:execute consultas nos seus dados federados usando o BigQuery ou o Serviço gerenciado para Apache Spark. Para mais informações, consulte Usar o Lakehouse entre nuvens.
  • Configurar permissões:use o Identity and Access Management (IAM) para gerenciar quem pode visualizar e consultar os dados federados.

Configurar o Interconexão entre nuvens (opcional)

Por padrão, as consultas ao catálogo remoto trafegam pela Internet pública. Para aumentar a segurança e a conformidade, oferecer um desempenho previsível e reduzir os custos de transferência de dados, use uma interconexão particular. Isso estabelece uma conexão de rede dedicada e particular entre sua nuvem privada virtual (VPC) Google Cloude a rede do provedor de nuvem remota (por exemplo, AWS).

É possível provisionar e configurar uma das seguintes opções de interconexão privada entre sua Google Cloud VPC e a VPC do provedor de nuvem remota (por exemplo, AWS):

Crie sessões do BGP entre o Cloud Router em Google Cloud e a VPC do provedor de nuvem remota para garantir a troca de rotas.

Para ativar consultas particulares, configure um caminho do Lakehouse para seu bucket de armazenamento remoto (por exemplo, um bucket do Amazon S3 da AWS) usando sua interconexão particular. Há dois fluxos arquitetônicos que você pode seguir para configurar esse roteamento:

  • Roteamento do balanceador de carga de rede de proxy interno regional:esse fluxo usa um balanceador de carga de rede de proxy interno regionalGoogle Cloud para distribuir solicitações em grupos de endpoints de rede (NEGs, na sigla em inglês) de conectividade híbrida que apontam para várias interfaces de rede elásticas (ENIs, na sigla em inglês) da AWS. Esse fluxo é essencial para balanceamento de carga, escalonabilidade e alta disponibilidade. Ele é necessário para a Interconexão por parceiro e recomendado para a Cross-Cloud Interconnect para balanceamento de carga, escalonabilidade e alta disponibilidade.
  • Roteamento direto de endpoint:esse fluxo conecta o Diretório de serviços diretamente a um único endereço IP de endpoint VPC de interface da AWS. Ele só funciona para o Interconexão entre nuvens e não é compatível com o Interconexão por parceiro.

Selecione o fluxo de configuração que corresponde aos seus requisitos de arquitetura:

Balanceador de carga de rede de proxy interno regional

Para configurar um balanceador de carga de rede de proxy regional interno para distribuir solicitações em várias ENIs da AWS para alta disponibilidade e balanceamento de carga, siga estas etapas:

Configurar a rede da AWS

Primeiro, crie um endpoint de interface de VPC do Amazon S3 (AWS PrivateLink):

  1. No console da VPC da AWS, crie um endpoint de interface para o Amazon S3.
  2. Como nome do serviço, especifique com.amazonaws.<var>AWS_REGION</var>.s3.
  3. Selecione a VPC e as sub-redes conectadas pelo Direct Connect à sua VPC Google Cloud .
  4. Anexe grupos de segurança ao endpoint para controlar o acesso de entrada.
  5. Isso provisiona interfaces de rede elásticas (ENIs, na sigla em inglês) em cada sub-rede selecionada. Anote os endereços IP particulares dessas ENIs.

Em seguida, configure os grupos de segurança:

  • Verifique se o grupo ou os grupos de segurança anexados às ENIs do endpoint do Amazon S3 permitem o tráfego TCP de entrada na porta 443 dos intervalos de IP relevantes da sua VPC Google Cloud .

Configurar Google Cloud rede

Siga as instruções para configurar um balanceador de carga de rede de proxy interno regional para endpoints híbridos.

Ao seguir as instruções, faça o seguinte:

  • Crie NEGs de conectividade híbrida (NON_GCP_PRIVATE_IP_PORT) e adicione os endereços IP particulares das ENIs da AWS que você criou anteriormente.
  • Use a porta TCP 443 para os NEGs, a verificação de integridade e a regra de encaminhamento.
  • Configure o balanceador de carga na mesma região Google Cloud do catálogo federado.

Depois de criar a regra de encaminhamento para o balanceador de carga, anote o endereço IP interno atribuído a ele. Esta é sua ILB_IP_ADDRESS.

Configurar o Service Directory

Registre o endereço IP do ILB no Diretório de serviços para que o Lakehouse possa descobri-lo.

  1. Crie um namespace para sua nuvem remota:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Substitua:

    • NAMESPACE: um identificador exclusivo para seu namespace.
    • PROJECT_ID: o ID do projeto do Google Cloud .
    • REGION: a Google Cloud região. Por exemplo, us-east4. Precisa ser a mesma região do catálogo federado.
  2. Crie um serviço no namespace do Diretório de serviços:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Substitua:

    • SERVICE_NAME: um identificador exclusivo para seu serviço.
  3. Crie um endpoint para o ILB no serviço:

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --project=PROJECT_ID \
        --namespace=NAMESPACE \
        --service=SERVICE_NAME \
        --location=REGION \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK \
        --address=ILB_IP_ADDRESS \
        --port=443

    Substitua:

    • ENDPOINT_NAME: um identificador exclusivo para seu endpoint.
    • PROJECT_NUMBER: o número do projeto Google Cloud. Use o número do projeto na flag --network.
    • ILB_IP_ADDRESS: o endereço IP interno da regra de encaminhamento do ILB.

Endpoint direto

Para configurar o Diretório de serviços para rotear o tráfego diretamente para um único endereço IP de endpoint da VPC de interface da AWS, siga estas etapas:

  1. Crie um endpoint de interface da VPC para o Amazon S3 na sua VPC da AWS. Anote o endereço IP e a porta desse endpoint.
  2. Crie um namespace para sua nuvem remota:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Substitua:

    • NAMESPACE: um identificador exclusivo para seu namespace.
    • PROJECT_ID: o ID do projeto do Google Cloud .
    • REGION: a Google Cloud região. Por exemplo, us-east4. Precisa ser a mesma região do catálogo federado.
  3. Crie um serviço no namespace do Diretório de serviços:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Substitua:

    • SERVICE_NAME: um identificador exclusivo para seu serviço.
  4. Crie um endpoint no serviço que contenha as informações de roteamento para o endpoint de VPC de interface do Amazon S3:

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --service=SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION \
        --address=S3_VPCE_IP_ADDRESS \
        --port=S3_VPCE_PORT \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK

    Substitua:

    • ENDPOINT_NAME: um identificador exclusivo para seu endpoint.
    • S3_VPCE_IP_ADDRESS: o endereço IP do endpoint da VPC de interface do Amazon S3. Por exemplo, 10.0.1.45.
    • S3_VPCE_PORT: o número da porta do endpoint da VPC de interface do Amazon S3. Por exemplo, 443.
    • PROJECT_NUMBER: o número do projeto Google Cloud. Use o número do projeto na flag --network.
    • VPC_NETWORK: o nome da rede VPC Google Cloud associada à sua interconexão particular.

Configurar a federação

Para consultar seus dados, configure um catálogo federado do Lakehouse que se conecte ao catálogo remoto.

Criar um secret regional

A federação exige credenciais para acessar o catálogo remoto. O Lakehouse usa secrets regionais do Secret Manager para armazenar e recuperar essas credenciais com segurança e fazer a autenticação com seu provedor remoto.

Para o Databricks, crie uma entidade de serviço na sua conta do Databricks e gere um ID do cliente e um segredo do cliente do OAuth. Verifique se essa entidade de serviço tem acesso de leitura ao catálogo de destino do Unity Catalog. Em seguida, formate essas credenciais como uma carga útil JSON para armazenar no Secret Manager.

  1. Crie um arquivo JSON chamado credentials.json com seu payload:

    {
      "client_id": "CLIENT_ID",
      "client_secret": "CLIENT_SECRET"
    }

    Substitua:

    • CLIENT_ID: o ID do cliente OAuth para seu principal de serviço do Databricks.
    • CLIENT_SECRET: a chave secreta do cliente OAuth para sua entidade de serviço do Databricks.
  2. Configure o endpoint regional do Secret Manager:

    Por padrão, o Secret Manager usa um endpoint global. No entanto, o Lakehouse entre nuvens exige que seus secrets sejam armazenados na mesma região do catálogo do Lakehouse. Para interagir com segredos regionais usando a CLI gcloud, substitua o endpoint da API padrão da sua sessão ou perfil atual. Para evitar problemas de conectividade, o segredo e o catálogo precisam ser criados na mesma região. Por exemplo, secretmanager.us-east4.rep.googleapis.com.

    gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/

    Substitua:

    • REGION: a Google Cloud região em que seu secret do Secret Manager está armazenado. Por exemplo, us-east4. Para evitar problemas de conectividade, o segredo e o catálogo precisam ser criados na mesma região. Por exemplo, secretmanager.us-east4.rep.googleapis.com.
  3. Faça upload da carga útil para o Secret Manager:

    gcloud secrets create DATABRICKS_SECRET_NAME \
      --location="REGION" \
      --project="PROJECT_ID" \
      --data-file=credentials.json

    Substitua:

    • DATABRICKS_SECRET_NAME: um nome para o secret do Databricks.

Criar um catálogo federado

Crie o catálogo federado usando o comando gcloud biglake iceberg catalogs create.

Console

  1. No console Google Cloud , acesse Lakehouse.

    Acessar o lakehouse

  2. Clique em Criar catálogo.

  3. Clique em Catálogo federado.

    Os detalhes da Configuração do catálogo aparecem.

  4. Em Origem do catálogo federado, selecione Unity (Databricks).

  5. Em Local dos dados, selecione a região do Lakehouse em que você quer criar o catálogo federado. Por exemplo, us-east4. Para minimizar a latência (mesmo na Internet pública), faça o seguinte ao selecionar uma região:

    • Se o catálogo do Unity Catalog estiver na AWS, selecione a regiãoGoogle Cloud mais próxima da sua região da AWS.
    • Se o catálogo do Unity Catalog estiver em Google Cloud, selecione a mesma região.
  6. Clique em Continuar.

    Os detalhes da conexão aparecem.

  7. Na seção Detalhes do catálogo remoto, no campo Nome da instância do Unity, insira o nome da instância de destino do Databricks. Por exemplo, abcd.cloud.databricks.com.

  8. No campo Nome do Unity Catalog, insira o nome do catálogo de destino do Databricks Unity Catalog para federar.

  9. Na seção Autenticação e rede, no campo Secret, insira o nome do seu secret do Databricks. Use o seguinte formato: projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAME.

  10. Opcional: no campo Nome do diretório de serviços, insira o caminho para seu serviço do Diretório de Serviços. Por exemplo, projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME. Isso só é necessário se você estiver configurando um Interconexão entre nuvens.

  11. Clique em Criar.

CLI da gcloud

Internet pública (sem CCI)

Se você não configurar o CCI, a conexão vai viajar com segurança pela Internet pública.

gcloud biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="unity" \
    --secret-name="projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAME" \
    --unity-instance-name="UNITY_INSTANCE_NAME" \
    --unity-catalog-name="UNITY_CATALOG_NAME" \
    --refresh-interval="REFRESH_INTERVAL" \
    --namespace-filters="NAMESPACE_FILTERS"

Substitua:

  • PROJECT_ID: o ID do projeto Google Cloud .
  • REGION: a região do Lakehouse em que o catálogo federado é criado. Por exemplo, us-east4. Para minimizar a latência, faça o seguinte ao selecionar uma região:
    • Se o catálogo do Unity Catalog estiver na AWS, selecione a regiãoGoogle Cloud mais próxima da sua região da AWS.
    • Se o catálogo do Unity Catalog estiver em Google Cloud, selecione a mesma região.
  • DATABRICKS_SECRET_NAME: o nome do seu secret do Databricks.
  • UNITY_INSTANCE_NAME: o nome da instância de destino do Databricks. Por exemplo, abcd.cloud.databricks.com.
  • UNITY_CATALOG_NAME: o nome do catálogo de destino do Databricks Unity Catalog a ser federado.
  • REFRESH_INTERVAL: especifica a frequência com que as informações do catálogo são atualizadas. Defina esse valor como uma duração, por exemplo, 330s ou 5m30s. Intervalos mais curtos atualizam os dados com mais frequência, mas podem custar mais em chamadas de API. Intervalos mais longos podem custar menos, mas os dados consultados podem não refletir seu conjunto de dados mais atual. Se for omitido ou se você definir o valor como 0s, as atualizações serão desativadas.
  • NAMESPACE_FILTERS (opcional): uma lista separada por vírgulas de namespaces a serem federados. Por exemplo, ns1,ns2. Se omitido, todos os namespaces serão incluídos.

De propriedade do cliente (CCI)

Se você configurou uma interconexão privada (como CCI dedicada ou Interconexão por parceiro), forneça a referência do serviço do Diretório de serviços para que o Lakehouse roteie o tráfego de forma privada.

gcloud biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="unity" \
    --secret-name="projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAME" \
    --unity-instance-name="UNITY_INSTANCE_NAME" \
    --unity-catalog-name="UNITY_CATALOG_NAME" \
    --refresh-interval="REFRESH_INTERVAL" \
    --namespace-filters="NAMESPACE_FILTERS" \
    --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME"

Substitua:

  • PROJECT_ID: o ID do projeto Google Cloud .
  • PROJECT_NUMBER: o número do projeto do Google Cloud .
  • REGION: a região do Lakehouse em que o catálogo federado é criado. Por exemplo, us-east4. Para minimizar a latência, faça o seguinte ao selecionar uma região:
    • Se o catálogo do Unity Catalog estiver na AWS, selecione a regiãoGoogle Cloud mais próxima da sua região da AWS.
    • Se o catálogo do Unity Catalog estiver em Google Cloud, selecione a mesma região. Observação: precisa ser a mesma região do namespace do Diretório de Serviços e do secret regional.
  • DATABRICKS_SECRET_NAME: o nome do seu secret do Databricks.
  • UNITY_INSTANCE_NAME: o nome da instância de destino do Databricks. Por exemplo, abcd.cloud.databricks.com.
  • UNITY_CATALOG_NAME: o nome do catálogo de destino do Databricks Unity Catalog a ser federado.
  • REFRESH_INTERVAL: especifica a frequência com que as informações do catálogo são atualizadas. Defina esse valor como uma duração, por exemplo, 330s ou 5m30s. Intervalos mais curtos atualizam os dados com mais frequência, mas podem custar mais em chamadas de API. Intervalos mais longos podem custar menos, mas os dados consultados podem não refletir seu conjunto de dados mais atual. Se for omitido ou se você definir o valor como 0s, as atualizações serão desativadas.
  • NAMESPACE_FILTERS (opcional): uma lista separada por vírgulas de namespaces a serem federados. Por exemplo, ns1,ns2. Se omitido, todos os namespaces serão incluídos.
  • NAMESPACE: o namespace do Diretório de serviços que você criou durante a configuração da interconexão particular.
  • SERVICE_NAME: o nome do serviço do Diretório de serviços que você criou durante a configuração da interconexão privada.

Conceda ao catálogo federado acesso ao secret

Quando o catálogo é criado, o Lakehouse provisiona uma conta de serviço exclusiva para ele (retornada como biglake-service-account na descrição do recurso).

Você precisa conceder a essa conta de serviço permissão para acessar o secret criado anteriormente neste tutorial. A propagação das políticas do IAM pode levar alguns minutos.

Conceda à conta de serviço do catálogo permissão para acessar o secret.

# Required to use regional secrets
gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
gcloud secrets add-iam-policy-binding DATABRICKS_SECRET_NAME \
  --project="PROJECT_ID" \
  --location="REGION" \
  --member="serviceAccount:$(gcloud biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID" \
      --location="REGION" \
      --format='value(biglake-service-account)')" \
  --role="roles/secretmanager.secretAccessor"

Verifique a conexão

Para verificar se a conta de serviço do catálogo federado tem acesso ao secret, execute o seguinte comando:

# Required to use regional secrets
gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
gcloud secrets get-iam-policy DATABRICKS_SECRET_NAME \
     --project="PROJECT_ID" \
     --location="REGION"

Na saída, verifique se a conta de serviço biglake-service-account tem o papel roles/secretmanager.secretAccessor atribuído a ela.

Em seguida, verifique se o ciclo de atualização em segundo plano do catálogo foi concluído e se os namespaces estão sendo sincronizados.

  1. Verifique se o status da atualização indica sucesso:

    gcloud biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID" \
      --location="REGION"
  2. Confirme se os bancos de dados remotos aparecem como namespaces sincronizados:

    gcloud biglake iceberg namespaces list \
      --catalog="FEDERATED_CATALOG_NAME" \
      --project="PROJECT_ID" \
      --location="REGION"

A seguir