giriiş size ve GitLab'ı kullanarak nasıl CI ardışık düzeni oluşturulacağını göstermiştim. Bu yazıda size en yeni ve önerilen Databricks dağıtım çerçevesi ile aynı hedefe nasıl ulaşacağınızı göstereceğim. DAB, Databricks platformu için karmaşık verilerin, analizlerin ve makine öğrenimi projelerinin geliştirilmesini kolaylaştırmaya yönelik yeni bir araç olarak Databricks ekibi tarafından aktif olarak desteklenmekte ve geliştirilmektedir. Önceki blogda Databricks CLI eXtensions Databricks Asset Bundles DAB ve özelliklerinin genel tanıtımını atlayıp sizi Databricks belgelerine yönlendireceğim. Burada dbx projemizi önceki blogdan DAB'a nasıl taşıyacağımıza odaklanacağım. Yol boyunca her adımı daha iyi kavramanıza yardımcı olabilecek bazı kavram ve özellikleri açıklayacağım. Databricks GUI'yi kullanarak geliştirme modeli Önceki gönderide kodumuzu ve iş akışlarımızı geliştirmek ve test etmek için Databricks GUI'yi kullandık. Bu blog yazısında kodumuzu geliştirmek için yerel ortamımızı da kullanabilmek istiyoruz. İş akışı şu şekilde olacaktır: Uzak bir depo oluşturun ve bunu yerel ortamımıza ve Databricks çalışma alanımıza kopyalayın. Burada kullanıyoruz. GitLab'ı Program mantığını geliştirin ve Databricks GUI'sinde veya yerel IDE'mizde test edin. Bu, bir Python Wheel paketi oluşturmak için Python komut dosyalarını, pytest kullanarak veri kalitesini test etmek için komut dosyalarını ve pytest'i çalıştırmak için bir not defterini içerir. Kodu GitLab'a aktarın. Databricks Asset Bundle'ları kullanarak Databricks üzerinde kaynaklar oluşturmak, dağıtmak ve başlatmak için bir GitLab Runner'ı tetikleyecektir. git push Geliştirme ortamlarınızı ayarlama Databricks CLI'si Öncelikle yerel makinenize Databricks CLI versiyon 0.205 veya üzerini kurmamız gerekiyor. Databricks CLI'nin yüklü sürümünü kontrol etmek için komutunu çalıştırın. Databricks CLI sürüm 0.205 veya üzerini yüklemek için bkz. . databricks -v Databricks CLI'yi yükleme veya güncelleme Kimlik doğrulama Databricks, geliştirme makinemizdeki Databricks CLI ile Databricks çalışma alanınız arasında destekler. Bu eğitim için Databricks kişisel erişim belirteci kimlik doğrulamasını kullanıyoruz. İki adımdan oluşur: çeşitli kimlik doğrulama yöntemlerini Databricks çalışma alanımızda kişisel bir erişim belirteci oluşturun. Yerel makinemizde bir Databricks konfigürasyon profili oluşturun. Databricks çalışma alanınızda bir Databricks belirteci oluşturmak için Kullanıcı Ayarları → Geliştirici → Belirteçlere erişim → Yönet → Yeni belirteç oluştur seçeneğine gidin. Bir konfigürasyon profili oluşturmak için kök klasörünüzde aşağıdaki içeriğe sahip dosyasını oluşturun: ~/.databrickscfg [asset-bundle-tutorial] host = https://xxxxxxxxxxx.cloud.databricks.com token = xxxxxxx Burada profil adımızdır, ana bilgisayar çalışma alanımızın adresidir ve belirteç de az önce oluşturduğumuz kişisel erişim belirtecidir. asset-bundle-tutorial Bu dosyayı Databricks CLI'yi kullanarak, terminalinizde çalıştırarak oluşturabilirsiniz. Komut sizden ve isteyecektir. işaretini belirtmezseniz profil adı olarak ayarlanacaktır. databricks configure --profile asset-bundle-tutorial Databricks Ana Bilgisayarı Kişisel Erişim Belirteci'ni --profile DEFAULT Git entegrasyonu (Databricks) İlk adım olarak . Daha sonra uzak bir depo oluşturup . Son olarak Gitlab çalıştırıcısındaki Databricks CLI ile Databricks çalışma alanımız arasında kimlik doğrulamayı ayarlamamız gerekiyor. Bunu yapmak için Gitlab CI/CD işlem hattı yapılandırmalarımıza ve olmak üzere iki ortam değişkeni eklemeliyiz. Bunun için deponuzu Gitlab'da açmak için gidin. Git kimlik bilgilerini yapılandırıyoruz ve uzak bir repoyu Databricks'e bağlıyoruz onu Databricks depomuza ve yerel makinemize kopyalıyoruz DATABRICKS_HOST DATABRICKS_TOKEN Ayarlar → CI/CD → Değişkenler → Değişken ekle seçeneğine Hem dbx hem de DAB, etrafında oluşturulmuştur, dolayısıyla özünde çok benzerler. Mevcut dbx projemizden manuel olarak paket oluşturma adımlarını inceleyeceğim. Databricks REST API'leri DAB projemiz için ayarlamamız gereken ilk şey dağıtım yapılandırmasıdır. . Ortamı ayarlamak için , iş akışlarını tanımlamak için ise kullandık. Dbx'te ortamlarımızı ve iş akışlarımızı (işler ve işlem hatları) tanımlamak ve ayarlamak için iki dosya kullanırız .dbx/project.json deployment.yml DAB'de her şey projenizin kök klasöründe bulunan dosyasına gider. İşte nasıl göründüğü: databricks.yml bundle: name: DAB_tutorial #our bundle name # These are for any custom variables for use throughout the bundle. variables: my_cluster_id: description: The ID of an existing cluster. default: xxxx-xxxxx-xxxxxxxx #The remote workspace URL and workspace authentication credentials are read from the caller's local configuration profile named <asset-bundle-tutorial> workspace: profile: asset-bundle-tutorial # These are the default job and pipeline settings if not otherwise overridden in # the following "targets" top-level mapping. resources: jobs: etl_job: tasks: - task_key: "main" existing_cluster_id: ${var.my_cluster_id} python_wheel_task: package_name: "my_package" entry_point: "etl_job" # take a look at the setup.py entry_points section for details on how to define an entrypoint libraries: - whl: ../dist/*.whl - task_key: "eda" existing_cluster_id: ${var.my_cluster_id} notebook_task: notebook_path: ../notebooks/explorative_analysis.py source: WORKSPACE depends_on: - task_key: "main" test_job: tasks: - task_key: "main_notebook" existing_cluster_id: ${var.my_cluster_id} notebook_task: notebook_path: ../notebooks/run_unit_test.py source: WORKSPACE libraries: - pypi: package: pytest # These are the targets to use for deployments and workflow runs. One and only one of these # targets can be set to "default: true". targets: # The 'dev' target, used for development purposes. # Whenever a developer deploys using 'dev', they get their own copy. dev: # We use 'mode: development' to make sure everything deployed to this target gets a prefix # like '[dev my_user_name]'. Setting this mode also disables any schedules and # automatic triggers for jobs and enables the 'development' mode for Delta Live Tables pipelines. mode: development default: true workspace: profile: asset-bundle-tutorial root_path: /Users/${workspace.current_user.userName}/.bundle/${bundle.name}/my-envs/${bundle.target} host: <path to your databricks dev workspace> paket yapılandırma dosyası, eşlemeler adı verilen bölümlerden oluşur. Bu eşlemeler, yapılandırma dosyasını ayrı mantıksal bloklar halinde modülerleştirmemize olanak tanır. 8 üst düzey eşleme vardır: databricks.yml paket değişkenler çalışma alanı eserler katmak kaynaklar senkronizasyon hedefler Burada projemizi düzenlemek için bu eşlemelerden beşini kullanıyoruz. : paket eşlemesinde paketin adını tanımlıyoruz. Burada, Git URL'si ve şubesi hakkındaki bilgilerin yanı sıra, geliştirme ortamlarımız için kullanılması gereken varsayılan bir küme kimliğini de tanımlayabiliriz. bundle : değişkenler Özel değişkenleri tanımlamak ve yapılandırma dosyamızı daha yeniden kullanılabilir hale getirmek için eşlemesini kullanabiliriz. Örneğin mevcut bir kümenin ID’si için bir değişken deklare ediyoruz ve bunu farklı iş akışlarında kullanıyoruz. Artık farklı bir küme kullanmak istemeniz durumunda tek yapmanız gereken değişken değerini değiştirmek. variables : kaynaklar haritalaması iş akışlarımızı tanımladığımız yerdir. Aşağıdaki eşlemelerin sıfırını veya birini içerir: , , ve . Bu temel olarak dbx projesindeki dosyamızdır. Bazı küçük farklılıklar olsa da: resources experiments jobs models pipelines deployment.yml için wheel paketimizin yolunu eklemeliyiz; aksi takdirde Databricks kitaplığı bulamaz. DAB kullanarak tekerlek paketleri oluşturma hakkında daha fazla bilgiyi bulabilirsiniz. python_wheel_task burada Not defteri görevlerini çalıştırmak için tam yollar yerine göreceli yolları kullanabiliriz. Dizüstü bilgisayarın dağıtılacağı yol, bu görevin bildirildiği dosyasına bağlıdır. databricks.yml : hedefler eşleme, projelerimizin farklı aşamalarının/ortamlarının yapılandırmalarını ve kaynaklarını tanımladığımız yerdir. Örneğin, tipik bir CI/CD hattı için üç hedefimiz olacaktır: geliştirme, hazırlama ve üretim. Her hedef, alt eşlemeler olarak tüm üst düzey eşlemelerden ( hariç) oluşabilir. İşte hedef eşlemenin şeması ( ). targets targets databricks.yml targets: <some-unique-programmatic-identifier-for-this-target>: artifacts: ... bundle: ... compute_id: string default: true | false mode: development resources: ... sync: ... variables: <preceding-unique-variable-name>: <non-default-value> workspace: ... Alt eşleme, daha önce üst düzey eşlemelerde tanımladığımız varsayılan yapılandırmaları geçersiz kılmamıza olanak tanır. Örneğin, CI/CD işlem hattımızın her aşaması için yalıtılmış bir Databricks çalışma alanına sahip olmak istiyorsak, her hedef için çalışma alanı alt eşlemesini ayarlamamız gerekir. workspace: profile: my-default-profile targets: dev: default: true test: workspace: host: https://<staging-workspace-url> prod: workspace: host: https://<production-workspace-url> katmak: etme eşlemesi, yapılandırma dosyamızı farklı modüllere bölmemize olanak tanır. Örneğin kaynaklarımızı ve değişkenlerimizi dosyasına kaydedip dosyamıza aktarabiliriz. include resources/dev_job.yml databricks.yml # yaml-language-server: $schema=bundle_config_schema.json bundle: name: DAB_tutorial #our bundle name workspace: profile: asset-bundle-tutorial include: - ./resources/*.yml targets: # The 'dev' target, used for development purposes. # Whenever a developer deploys using 'dev', they get their own copy. dev: # We use 'mode: development' to make sure everything deployed to this target gets a prefix # like '[dev my_user_name]'. Setting this mode also disables any schedules and # automatic triggers for jobs and enables the 'development' mode for Delta Live Tables pipelines. mode: development default: true DAB yapılandırmalarının daha ayrıntılı açıklaması için göz atın Databricks Asset Bundle yapılandırmalarına İş akışları İş akışları tam olarak önceki blogda anlattığım gibidir. Tek fark, yapıtların ve dosyaların konumudur. Proje iskeleti işte final projesinin nasıl göründüğü ASSET-BUNDLE-TUTORAL/ ├─ my_package/ │ ├─ tasks/ │ │ ├─ __init__.py │ │ ├─ sample_etl_job.py │ ├─ __init__.py │ ├─ common.py ├─ test/ │ ├─ conftest.py │ ├─ test_sample.py ├─ notebooks/ │ ├─ explorative_analysis.py │ ├─ run_unit_test.py ├─ resources/ │ ├─ dev_jobs.yml ├─ .gitignore ├─ .gitlab-ci.yml ├─ databricks.yml ├─ README.md ├─ setup.py Doğrula, Dağıt ve Çalıştır Şimdi terminalinizi açın ve kök dizinden aşağıdaki komutları çalıştırın: Öncelikle konfigürasyon dosyamızın doğru format ve sözdizimine sahip olup olmadığını kontrol etmeliyiz. Doğrulama başarılı olursa paket yapılandırmasının JSON temsilini alırsınız. Bir hata durumunda düzeltin ve JSON dosyasını alana kadar komutu tekrar çalıştırın. validate: databricks bundle validate Dağıtım, Python tekerlek paketini oluşturmayı ve bunu Databricks çalışma alanımıza dağıtmayı, not defterlerini ve diğer dosyaları Databricks çalışma alanımıza dağıtmayı ve Databricks iş akışlarımızda işleri oluşturmayı içerir. dağıtım: databricks bundle deploy Hiçbir komut seçeneği belirtilmezse Databricks CLI, paket yapılandırma dosyalarında bildirilen varsayılan hedefi kullanır. Burada yalnızca tek bir hedefimiz var, bu yüzden önemli değil, ancak bunu göstermek için bayrağını kullanarak belirli bir hedefi de konuşlandırabiliriz. -t dev Dağıtılan işleri çalıştırın. Burada hangi işi çalıştırmak istediğimizi belirtebiliriz. Örneğin aşağıdaki komutta dev hedefinde işini çalıştırıyoruz. çalıştır: test_job databricks bundle run -t dev test_job çıktıda, çalışma alanınızda yürütülen işe işaret eden bir URL alırsınız. işlerinizi Databricks çalışma alanınızın İş Akışı bölümünde de bulabilirsiniz. CI ardışık düzeni yapılandırması CI boru hattımızın genel kurulumu önceki projeyle aynı kalıyor. İki ana aşamadan oluşur: ve . aşamasında, birim testlerini çalıştırır ve test için ayrı bir iş akışı dağıtır. Test aşamasının başarıyla tamamlanmasının ardından etkinleştirilen aşaması, ana ETL iş akışınızın dağıtımını yönetir. test etme dağıtma Test unit-test-job dağıtım Burada Databricks CLI kurulumu ve kimlik doğrulama profilini ayarlamak için her aşamadan önce ek adımlar eklememiz gerekiyor. Bunu CI hattımızın bölümünde yapıyoruz. anahtar sözcüğü, her işin komutlarından önce çalışması gereken komut dizisini tanımlamak için kullanılır. Bununla ilgili daha fazla bilgiyi bulabilirsiniz. before_script before_script script burada İsteğe bağlı olarak, her işten SONRA çalışması gereken komut dizisini tanımlamak için anahtar sözcüğünü kullanabilirsiniz. Burada, her iş bittikten sonra temizlik yapmak için kullanabiliriz. Genel olarak boru hattımız şu adımlardan geçer: after_project databricks bundle destroy --auto-approve Databricks CLI'yi yükleyin ve yapılandırma profili oluşturun. Projeyi oluşturun. Derleme yapıtlarını Databricks çalışma alanına aktarın. Tekerlek paketini kümenize takın. İşleri Databricks İş Akışlarında oluşturun. İşleri çalıştırın. dosyamız şu şekilde görünüyor: .gitlab-ci.yml image: python:3.9 stages: # List of stages for jobs, and their order of execution - test - deploy default: before_script: - echo "install databricks cli" - curl -V - curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sh - echo "databricks CLI installation finished" - echo "create the configuration profile for token authentication" - echo "[asset-bundle-tutorial]" > ~/.databrickscfg - echo "token = $DATABRICKS_TOKEN" >> ~/.databrickscfg - echo "host = $DATABRICKS_HOST" >> ~/.databrickscfg - echo "validate the bundle" - databricks bundle validate after_script: - echo "remove all workflows" #- databricks bundle destroy --auto-approve unit-test-job: # This job runs in the test stage. stage: test script: - echo "Running unit tests." - pip3 install --upgrade wheel setuptools - pip install -e ".[local]" - databricks bundle deploy -t dev - databricks bundle run -t dev test_job deploy-job: # This job runs in the deploy stage. stage: deploy # It only runs when *both* jobs in the test stage complete successfully. script: - echo "Deploying application..." - echo "Install dependencies" - pip install -e ".[local]" - echo "Deploying Job" - databricks bundle deploy -t dev - databricks bundle run -t dev etl_job Notlar Paket projenizi oluşturmanıza yardımcı olabilecek bazı notlar: Bu blogda paketimizi manuel olarak oluşturduk. Deneyimlerime göre bu, altta yatan kavram ve özelliklerin daha iyi anlaşılmasına yardımcı oluyor. Ancak projenize hızlı bir başlangıç yapmak istiyorsanız Databricks veya diğer taraflarca sağlanan varsayılan ve varsayılan olmayan paket şablonlarını kullanabilirsiniz. Varsayılan Python şablonuyla bir projeyi nasıl başlatacağınızı öğrenmek için gönderisine göz atın. bu Databricks kullanarak kodunuzu dağıttığınızda, Databricks CLI, dosyasını kullanarak paketinizi oluşturmak için komutunu çalıştırır. Zaten kuruluysa ancak makineniz yerine takma adını kullanıyorsa sorunlarla karşılaşırsınız. Ancak bunu düzeltmek kolaydır. Örneğin, ve bazı çözümlere sahip iki Yığın Taşması iş parçacığı bulunmaktadır. databricks bundle deploy setup.py python3 setup.py bdist_wheel python3 python3 python burada burada Sıradaki ne Bir sonraki blog yazımda Databricks üzerinde makine öğrenimi projesinin nasıl başlatılacağına dair ilk blog yazımla başlayacağım. Bu, geliştirmeden üretime kadar her şeyi kapsayan, yaklaşan uçtan uca makine öğrenimi hattımın ilk gönderisi olacak. Bizi izlemeye devam edin! Kaynaklar . Bu eğitim için depo dosyasındaki Cluster_id değerini güncellediğinizden emin olun. resources/dev_jobs.yml Dbx'ten paketlere geçiş | AWS'de Databricks Databricks Varlık Paketleri geliştirme çalışması görevleri | AWS'de Databricks Databricks Asset Bundle dağıtım modları | AWS'de Databricks Databricks Asset Bundles'ı kullanarak bir Python tekerleği geliştirin | AWS'de Databricks Databricks Varlık Paketleri: Veri Ürünlerini Databricks'te Dağıtmaya Yönelik Standart, Birleşik Bir Yaklaşım (youtube.com) repo ve slaytlar https://github.com/databricks/databricks-asset-bundles-dais2023