Pular para o conteúdo principal

compartilhamento de pacotes e arquivos de pacotes

As organizações geralmente mantêm muitos pacotes e, nesses cenários mais avançados de CI/CD, esses pacotes compartilham configurações e arquivos comuns. Por exemplo, os pacotes podem compartilhar a biblioteca armazenada em um local compartilhado, ou as configurações e variáveis do compute podem ser definidas em um arquivo de configuração em um local compartilhado.

Este artigo fornece informações sobre como configurar dois pacotes para usar a configuração e os arquivos em uma pasta compartilhada. Os exemplos completos de pacotes compartilhados estão no repositório bundle-examples do GitHub.

Para obter mais práticas recomendadas CI/CD, consulte Práticas recomendadas e fluxo de trabalho recomendado CI/CD em Databricks.

Estrutura do repositório

Uma prática comum para organizações com muitos pacotes é localizá-los em um repositório, com uma pasta compartilhada. Um exemplo de estrutura de repositório com mais de um pacote pode ser:

databricks-bundle-repo/
├── shared
│ ├── variables.yml # has variable definitions like cluster_id
│ └── shared_library.py # has shared code used in multiple bundles
├── job_bundle
│ ├── databricks.yml # uses ${var.cluster_id} defined in variables.yml
│ ├── resources/
│ │ └── job_bundle.job.yml
│ ├── src/
│ │ ├── notebook.ipynb
│ │ └── my_python.py # uses ../shared/shared_library.py
│ └── README.md
├── pipeline_bundle
│ ├── databricks.yml
│ ├── resources/
│ │ ├── pipeline_bundle.job.yml # uses ${var.cluster_id} defined in variables.yml
│ │ └── pipeline_bundle.pipeline.yml
│ ├── src/
│ │ └── dlt_pipeline.ipynb
│ └── README.md

Configuração para compartilhamento de arquivos

Para incluir arquivos de código fora de um pacote, especifique-os em paths key do mapeamento de sincronização.

Por exemplo, dada uma pasta shared em um repositório (no mesmo nível das pastas de pacotes) que contém:

  • um arquivo de código shared_library.py com o conteúdo:

    Python
    def multiply(a: int, b: int) -> int:
    return a * b
  • um variables.yml com o conteúdo:

    YAML
    variables:
    cluster_id:
    default: 1234-567890-abcde123

Então, uma configuração de pacote que usa o arquivo de código compartilhado e a variável de pacote definida na configuração compartilhada seria:

YAML
# databricks.yml

bundle:
name: job_bundle

sync:
paths:
- ../shared
- ./src

include:
- resources/*.yml
- ../shared/*.yml

targets:
dev:
mode: development
default: true
workspace:
host: https://my-workspace.cloud.databricks.com

prod:
mode: production
workspace:
host: https://my-workspace.cloud.databricks.com
root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
permissions:
- user_name: someone@example.com
level: CAN_MANAGE
YAML
# job_bundle.yml

resources:
jobs:
my_python_job:
name: my_python_job
tasks:
- task_key: python_task
spark_python_task:
python_file: src/my_python.py # uses ../shared/shared_library.py
my_notebook_job:
name: my_notebook_job
tasks:
- task_key: notebook_task
existing_cluster_id: ${var.cluster_id} # defined in ../shared/variables.yml
notebook_task:
notebook_path: src/notebook.ipynb
Python
# my_python.py

import os
import sys

# Traverse to the sync root path.
# Note: this requires DBR >= 14 or serverless.
shared_path = os.getcwd() + "/../../shared"

# Add the shared directory to the Python path.
sys.path.append(shared_path)

# Import a function from shared_library.py
from shared_library import multiply

# Use the function.
result = multiply(2, 3)
print(result)

Validação do pacote

É importante sempre validar a configuração do pacote, especialmente se os pacotes compartilharem arquivos e configurações. O comando databricks bundle validate garante que as variáveis, os arquivos e os caminhos especificados no pacote existam e sejam herdados e configurados corretamente, além de gerar informações sobre problemas para que o senhor possa corrigi-los antes de implantá-los. Consulte Validar um pacote.

executar o seguinte comando para cada feixe antes de ser implantado:

Bash
databricks bundle validate

Permissões para pacotes compartilhados

Em uma organização, os pacotes geralmente são desenvolvidos, implantados e executados por diferentes indivíduos com responsabilidades e níveis de permissão variados. Todos os usuários talvez precisem ser capazes de view os bundles, alguns precisam ser capazes de implantar alterações no bundle e executar recurso no desenvolvimento de destino workspace, alguns poucos precisam ser capazes de implantar alterações no bundle e executar recurso na produção, e o fluxo de trabalho automatizado que usa uma entidade de serviço precisa ser capaz de executar recurso em um bundle. Para garantir que os pacotes compartilhados possam ser gerenciados com eficiência por todos os usuários da organização, defina permissões de nível superior e permissões de destino de produção. Para obter informações sobre permissões de nível superior, que aplicam permissões a todos os recursos em um pacote, consulte permissões.

dica

Databricks O ativo Bundles no site workspace permite a fácil colaboração em pacotes. Consulte Colaboração em pacotes no site workspace.

Por exemplo, o databricks.yml para um pacote compartilhado pode ser:

YAML
# databricks.yml

bundle:
name: shared_bundle

include:
- resources/*.yml

permissions:
- level: CAN_VIEW
group_name: all_users
- level: CAN_MANAGE
group_name: data_engineering_users
- level: CAN_RUN
service_principal_name: 123456-abcdef

targets:
dev:
mode: development
default: true
workspace:
host: https://my-workspace.cloud.databricks.com

prod:
mode: production
workspace:
host: https://my-workspace.cloud.databricks.com
root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
permissions:
- user_name: someone@example.com
level: CAN_MANAGE