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:Pythondef multiply(a: int, b: int) -> int:
return a * b -
um
variables.yml
com o conteúdo:YAMLvariables:
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:
# 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
# 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
# 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:
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.
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:
# 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