Paketleri ve paket dosyalarını paylaşma

Kuruluşlar genellikle birçok paket tutar ve bu daha gelişmiş CI/CD senaryolarında bu paketler ortak yapılandırmayı ve dosyaları paylaşır. Örneğin, paketler paylaşılan bir konumda depolanan kitaplıkları paylaşabilir veya paylaşılan konumdaki bir yapılandırma dosyasında işlem ayarları ve değişkenleri tanımlanabilir.

Bu makalede, iki paketin paylaşılan bir klasördeki yapılandırmayı ve dosyaları kullanması için nasıl yapılandırılacağı hakkında bilgi sağlanır. Paylaşılan paket örneklerinin tamamı paket örnekleri GitHub deposunda yer alır.

Ek CI/CD ve geliştirici en iyi uygulamaları için bkz. Databricks'te CI/CD iş akışları ve Databricks'te geliştirici en iyi yöntemleri.

Depo yapısı

Yaygın bir uygulama ve Databricks'in önerisi, paylaşılan klasöre sahip bir depoda birçok paket için kaynak depolamaktır.

Birden fazla paket içeren örnek bir depo yapısı şöyle olabilir:

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/
│   │   └── my_pipeline.ipynb
│   └── README.md

Dosya paylaşımı yapılandırması

Kod dosyalarını bir paketin dışına eklemek için bunları paths anahtarında belirtin.

Örneğin, depodaki ( shared paket klasörleriyle aynı düzeyde) aşağıdakiler içeren bir klasör verilmiştir:

  • içeriğini içeren bir shared_library.py kod dosyası:

    def multiply(a: int, b: int) -> int:
      return a * b
    
  • içindekiler ile a variables.yml :

    variables:
      cluster_id:
        default: 1234-567890-abcde123
    

Ardından paylaşılan kod dosyasını ve paylaşılan yapılandırmada tanımlanan paket değişkenini kullanan bir paket yapılandırması şöyle olacaktır:

# 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 :re[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)

Paket doğrulama

Paket yapılandırmanızı her zaman doğrulamak ve özellikle de paketleriniz dosyaları ve yapılandırmayı paylaşıyorsa önemlidir. komutu databricks bundle validate , paketinizde belirtilen değişkenlerin, dosyaların ve yolların mevcut olmasını ve düzgün bir şekilde devralınmasını ve yapılandırılmasını sağlar ve dağıtmadan önce bunları düzeltebilmeniz için sorunlar hakkında bilgi çıkışı sağlar. Bkz. databricks paketi doğrulama.

Dağıtmadan önce her paket için aşağıdaki komutu çalıştırın:

databricks bundle validate

Paylaşılan paketler için izinler

Bir kuruluşta paketler genellikle farklı sorumluluklara ve izin düzeylerine sahip farklı kişiler tarafından geliştirilir, dağıtılır ve çalıştırılır. Tüm kullanıcıların paketleri görüntüleyebilmesi, bazılarının paket değişikliklerini dağıtabilmesi ve kaynakları hedef geliştirme çalışma alanında çalıştırabilmesi, belirli birkaç kullanıcının paket değişikliklerini dağıtabilmesi ve kaynakları üretimde çalıştırabilmesi ve hizmet sorumlusu kullanan otomatik iş akışlarının kaynakları pakette çalıştırabilmesi gerekebilir. Paylaşılan paketlerinizin kuruluşunuzdaki tüm kullanıcılar tarafından etkili bir şekilde yönetilebilmesini sağlamak için, üretim hedefi izinlerinin yanı sıra üst düzey izinleri de ayarlayın. Bir paketteki tüm kaynaklara izinler uygulayan en üst düzey izinler hakkında bilgi için bkz. izinler.

Tavsiye

Çalışma alanında bildirim temelli Otomasyon Paketleri, paketlerde kolay işbirliği sağlar. Bkz. Çalışma alanında paketler üzerinde işbirliği yapma.

Örneğin, databricks.yml paylaşılan paket için şu olabilir:

# 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