Share via


Compartilhar tabelas de recursos entre workspaces (herdado)

Importante

  • Esta documentação foi desativada e pode não estar atualizada.
  • O Databricks recomenda usar a Engenharia de Recursos no Catálogo do Unity para compartilhar tabelas de recursos entre espaços de trabalho. A abordagem nesse artigo foi preterida.

O Azure Databricks dá suporte ao compartilhamento de tabelas de recursos em vários workspaces. Por exemplo, no seu workspace, você pode criar, fazer gravações ou leituras em uma tabela de recursos em um repositório de recursos centralizado. Isso é útil quando várias equipes compartilham o acesso a tabelas de recursos ou quando sua organização tem vários workspaces para lidar com diferentes fases de desenvolvimento.

Para um repositório de recursos centralizado, o Databricks recomenda que você designe um só workspace para armazenar todos os metadados do repositório de recursos e crie contas para cada usuário que precisa acessar o repositório de recursos.

Se as suas equipes também estiverem compartilhando modelos entre workspaces, você poderá optar por dedicar o mesmo workspace centralizado às tabelas de recursos e aos modelos ou especificar diferentes workspaces centralizados para cada um.

Vários espaços de trabalho no repositório de recursos

O acesso ao repositório de recursos centralizado é controlado por tokens. Cada usuário ou script que precisa ter acesso cria um token de acesso pessoal no repositório de recursos centralizado e copia esse token para o gerenciador de segredos do respectivo workspace local. Cada solicitação de API enviada ao workspace do repositório de recursos centralizado precisa incluir o token de acesso. O cliente do Repositório de Recursos fornece um mecanismo simples para especificar os segredos a serem usados quando operações entre workspaces forem executadas.

Observação

Como melhor prática de segurança, ao autenticar com ferramentas, sistemas, scripts e aplicativos automatizados, o Databricks recomenda que você use tokens de acesso pertencentes às entidades de serviço e não aos usuários do workspace. Para criar tokens para entidades de serviço, consulte Gerenciar tokens para uma entidade de serviço.

Requisitos

O uso de um repositório de recursos entre workspaces exige:

  • Cliente do Repositório de recursos v0.3.6 e superior.
  • Os dois workspaces precisam ter acesso aos dados brutos do recurso. Eles precisam compartilhar o mesmo metastore do Hive externo e ter acesso ao mesmo armazenamento do DBFS.
  • Se as listas de acesso de IP estiverem habilitadas, os endereços IP do workspace precisarão estar nas listas de acesso.

Configurar o token de API de um registro remoto

Nesta seção, "Workspace B" refere-se ao workspace centralizado ou remoto do repositório de recursos.

  1. No Workspace B, crie um token de acesso.
  2. No seu workspace local, crie segredos para armazenar o token de acesso e as informações sobre o Workspace B:
    1. Crie um escopo do segredo: databricks secrets create-scope --scope <scope>.
    2. Escolha um identificador exclusivo para o Workspace B, mostrado aqui como <prefix>. Em seguida, crie três segredos com os nomes de chaves especificados:
      • databricks secrets put --scope <scope> --key <prefix>-host : insira o nome do host do Workspace B. Use os seguintes comandos Python para obter o nome do host de um workspace:

        import mlflow
        
        host_url = mlflow.utils.databricks_utils.get_webapp_url()
        host_url
        
      • databricks secrets put --scope <scope> --key <prefix>-token : insira o token de acesso do Workspace B.

      • databricks secrets put --scope <scope> --key <prefix>-workspace-id: insira a ID do workspace para o Workspace B, que pode ser encontrada na URL de qualquer página.

Observação

O ideal é compartilhar o escopo do segredo com outros usuários, pois há um limite no número de escopos de segredos por workspace.

Especificar um repositório remoto de recursos

Com base no escopo do segredo e no prefixo do nome que você criou para o workspace do repositório remoto de recursos, você pode construir um URI do repositório de recursos no formato:

feature_store_uri = f'databricks://<scope>:<prefix>'

Em seguida, especifique o URI explicitamente ao criar uma instância de FeatureStoreClient:

fs = FeatureStoreClient(feature_store_uri=feature_store_uri)

Crie um banco de dados para tabelas de recursos no local compartilhado do DBFS

Antes de criar tabelas de recursos no repositório de recursos remoto, você deve criar um banco de dados para armazená-las. O banco de dados deve existir no local compartilhado do DBFS.

Por exemplo, para criar um banco de dados recommender no local compartilhado /mnt/shared, use o seguinte comando:

%sql CREATE DATABASE IF NOT EXISTS recommender LOCATION '/mnt/shared'

Criar uma tabela de recursos no repositório remoto de recursos

A API usada para criar uma tabela de recursos em um repositório remoto de recursos depende da versão do Databricks Runtime que você está usando.

V0.3.6 e superior

Use a API FeatureStoreClient.create_table:

fs = FeatureStoreClient(feature_store_uri=f'databricks://<scope>:<prefix>')
fs.create_table(
  name='recommender.customer_features',
  primary_keys='customer_id',
  schema=customer_features_df.schema,
  description='Customer-keyed features'
)

V0.3.5 e inferior

Use a API FeatureStoreClient.create_feature_table:

fs = FeatureStoreClient(feature_store_uri=f'databricks://<scope>:<prefix>')
fs.create_feature_table(
  name='recommender.customer_features',
  keys='customer_id',
  schema=customer_features_df.schema,
  description='Customer-keyed features'
)

Para obter exemplos de outros métodos do Repositório de Recursos, confira Exemplo de notebook: compartilhar tabelas de recursos entre workspaces.

Usar uma tabela de recursos no repositório remoto de recursos

Você pode ler uma tabela de recursos no repositório remoto de recursos com o método FeatureStoreClient.read_table, primeiro definindo o feature_store_uri:

fs = FeatureStoreClient(feature_store_uri=f'databricks://<scope>:<prefix>')
customer_features_df = fs.read_table(
  name='recommender.customer_features',
)

Também há suporte para outros métodos auxiliares para acessar a tabela de recursos:

fs.read_table()
fs.get_feature_table() # in v0.3.5 and below
fs.get_table() # in v0.3.6 and above
fs.write_table()
fs.publish_table()
fs.create_training_set()

Usar um registro de modelo remoto

Além de especificar um URI do repositório remoto de recursos, você também pode especificar um URI do registro de modelo remoto para compartilhar modelos entre workspaces.

Para especificar um registro de modelo remoto para log ou pontuação de modelo, use um URI do registro de modelo para criar uma instância de um FeatureStoreClient.

fs = FeatureStoreClient(model_registry_uri=f'databricks://<scope>:<prefix>')
customer_features_df = fs.log_model(
    model,
    "recommendation_model",
    flavor=mlflow.sklearn,
    training_set=training_set,
    registered_model_name="recommendation_model"
)

Usando feature_store_uri e model_registry_uri, você pode treinar um modelo usando qualquer tabela de recursos local ou remota e registrar o modelo em qualquer registro de modelo local ou remoto.

fs = FeatureStoreClient(
    feature_store_uri=f'databricks://<scope>:<prefix>',
    model_registry_uri=f'databricks://<scope>:<prefix>'
)

Exemplo de notebook: compartilhar tabelas de recursos entre workspaces

O notebook a seguir mostra como trabalhar com um repositório de recursos centralizado.

Exemplo de notebook do Repositório de Recursos centralizado

Obter notebook