परिचय में, मैंने आपको दिखाया कि और GitLab का उपयोग करके CI पाइपलाइन कैसे बनाई जाती है। इस पोस्ट में, मैं आपको दिखाऊंगा कि नवीनतम और अनुशंसित डेटाब्रिक्स परिनियोजन ढांचे, के साथ समान उद्देश्य कैसे प्राप्त किया जाए। डेटाब्रिक्स प्लेटफ़ॉर्म के लिए जटिल डेटा, एनालिटिक्स और एमएल परियोजनाओं के विकास को सुव्यवस्थित करने के लिए एक नए उपकरण के रूप में डेटाब्रिक्स टीम द्वारा DAB को सक्रिय रूप से समर्थित और विकसित किया गया है। पिछले ब्लॉग डेटाब्रिक्स CLI एक्सटेंशन डेटाब्रिक्स एसेट बंडल मैं DAB और इसकी विशेषताओं के सामान्य परिचय को छोड़कर आपको Databricks दस्तावेज़ों का संदर्भ दूंगा। यहाँ, मैं इस बात पर ध्यान केंद्रित करूँगा कि हमारे dbx प्रोजेक्ट को पिछले ब्लॉग से DAB में कैसे माइग्रेट किया जाए। साथ ही, मैं कुछ अवधारणाओं और विशेषताओं के बारे में बताऊंगा जो आपको प्रत्येक चरण को बेहतर ढंग से समझने में मदद कर सकती हैं। डेटाब्रिक्स GUI का उपयोग करके विकास पैटर्न पिछली पोस्ट में, हमने अपने कोड और वर्कफ़्लो को विकसित करने और परीक्षण करने के लिए डेटाब्रिक्स GUI का उपयोग किया था। इस ब्लॉग पोस्ट के लिए, हम अपने कोड को विकसित करने के लिए अपने स्थानीय वातावरण का उपयोग करने में सक्षम होना चाहते हैं। वर्कफ़्लो इस प्रकार होगा: एक रिमोट रिपॉजिटरी बनाएं और इसे हमारे स्थानीय वातावरण और डेटाब्रिक्स वर्कस्पेस पर क्लोन करें। हम यहां उपयोग करते हैं। GitLab का प्रोग्राम लॉजिक विकसित करें और इसे डेटाब्रिक्स GUI के अंदर या हमारे स्थानीय IDE पर परीक्षण करें। इसमें पायथन व्हील पैकेज बनाने के लिए पायथन स्क्रिप्ट, pytest का उपयोग करके डेटा गुणवत्ता का परीक्षण करने के लिए स्क्रिप्ट और pytest चलाने के लिए एक नोटबुक शामिल है। कोड को GitLab पर पुश करें। , Databricks Asset Bundles का उपयोग करके Databricks पर संसाधनों का निर्माण, परिनियोजन और लॉन्च करने के लिए GitLab Runner को ट्रिगर करेगा। git push अपना विकास परिवेश स्थापित करना डेटाब्रिक्स सीएलआई सबसे पहले, हमें आपके स्थानीय मशीन पर Databricks CLI संस्करण 0.205 या उससे ऊपर स्थापित करने की आवश्यकता है। Databricks CLI के अपने स्थापित संस्करण की जाँच करने के लिए, कमांड चलाएँ। Databricks CLI संस्करण 0.205 या उससे ऊपर स्थापित करने के लिए, देखें। databricks -v Databricks CLI को स्थापित या अपडेट करें प्रमाणीकरण डेटाब्रिक्स हमारे विकास मशीन पर डेटाब्रिक्स CLI और आपके डेटाब्रिक्स कार्यक्षेत्र के बीच समर्थन करता है। इस ट्यूटोरियल के लिए, हम डेटाब्रिक्स व्यक्तिगत एक्सेस टोकन प्रमाणीकरण का उपयोग करते हैं। इसमें दो चरण होते हैं: विभिन्न प्रमाणीकरण विधियों का हमारे डेटाब्रिक्स कार्यक्षेत्र पर एक व्यक्तिगत एक्सेस टोकन बनाएं। अपनी स्थानीय मशीन पर एक डेटाब्रिक्स कॉन्फ़िगरेशन प्रोफ़ाइल बनाएं। अपने डेटाब्रिक्स कार्यक्षेत्र में डेटाब्रिक्स टोकन उत्पन्न करने के लिए, उपयोगकर्ता सेटिंग्स → डेवलपर → एक्सेस टोकन → प्रबंधित करें → नया टोकन उत्पन्न करें पर जाएं। कॉन्फ़िगरेशन प्रोफ़ाइल बनाने के लिए, अपने रूट फ़ोल्डर में निम्नलिखित सामग्री के साथ फ़ाइल बनाएँ: ~/.databrickscfg [asset-bundle-tutorial] host = https://xxxxxxxxxxx.cloud.databricks.com token = xxxxxxx यहां, हमारा प्रोफ़ाइल नाम है, होस्ट हमारे कार्यक्षेत्र का पता है, और टोकन व्यक्तिगत एक्सेस टोकन है जिसे हमने अभी बनाया है। asset-bundle-tutorial आप अपने टर्मिनल में चलाकर Databricks CLI का उपयोग करके यह फ़ाइल बना सकते हैं। कमांड आपको और के लिए संकेत देगा। यदि आप फ़्लैग निर्दिष्ट नहीं करते हैं, तो प्रोफ़ाइल नाम पर सेट हो जाएगा। databricks configure --profile asset-bundle-tutorial Databricks होस्ट पर्सनल एक्सेस टोकन --profile DEFAULT Git एकीकरण (डेटाब्रिक्स) पहले चरण के रूप में, हम इसके बाद, हम एक रिमोट रिपोजिटरी बनाते हैं और । अंत में हमें Gitlab रनर पर Databricks CLI और हमारे Databricks वर्कस्पेस के बीच प्रमाणीकरण सेट अप करने की आवश्यकता है। ऐसा करने के लिए, हमें अपने Gitlab CI/CD पाइपलाइन कॉन्फ़िगरेशन में दो पर्यावरण चर, और जोड़ने चाहिए। इसके लिए Gitlab में अपना रिपो खोलें, पर जाएँ Git क्रेडेंशियल कॉन्फ़िगर करते हैं और एक रिमोट रिपो को Databricks से जोड़ते हैं। इसे अपने Databricks रिपो के साथ-साथ अपनी स्थानीय मशीन पर क्लोन करते हैं DATABRICKS_HOST DATABRICKS_TOKEN सेटिंग्स→ CI/CD → वैरिएबल्स → वैरिएबल्स जोड़ें dbx और DAB दोनों ही इर्द-गिर्द बने हैं, इसलिए उनके मूल में, वे बहुत समान हैं। मैं अपने मौजूदा dbx प्रोजेक्ट से मैन्युअल रूप से बंडल बनाने के लिए चरणों से गुज़रूँगा। Databricks REST API के पहली चीज़ जो हमें अपने DAB प्रोजेक्ट के लिए सेट अप करने की ज़रूरत है, वह है डिप्लॉयमेंट कॉन्फ़िगरेशन। । वातावरण को सेट अप करने के लिए, हमने उपयोग किया, और वर्कफ़्लो को परिभाषित करने के लिए, हमने उपयोग किया। dbx में, हम अपने वातावरण और वर्कफ़्लो (जॉब और पाइपलाइन) को परिभाषित करने और सेट अप करने के लिए दो फ़ाइलों का उपयोग करते हैं .dbx/project.json deployment.yml DAB में, सब कुछ में चला जाता है, जो आपके प्रोजेक्ट के रूट फ़ोल्डर में स्थित होता है। यह इस तरह दिखता है: 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> बंडल कॉन्फ़िगरेशन फ़ाइल में मैपिंग नामक अनुभाग होते हैं। ये मैपिंग हमें कॉन्फ़िगरेशन फ़ाइल को अलग-अलग तार्किक ब्लॉक में मॉड्यूलर करने की अनुमति देते हैं। 8 शीर्ष-स्तरीय मैपिंग हैं: databricks.yml बंडल चर कार्यस्थान कलाकृतियों शामिल करना संसाधन साथ-साथ करना लक्ष्यों को यहां, हम अपनी परियोजना को व्यवस्थित करने के लिए इनमें से पांच मैपिंग का उपयोग करते हैं। : बंडल मैपिंग में, हम बंडल का नाम परिभाषित करते हैं। यहाँ, हम एक डिफ़ॉल्ट क्लस्टर आईडी भी परिभाषित कर सकते हैं जिसका उपयोग हमारे विकास वातावरण के लिए किया जाना चाहिए, साथ ही Git URL और शाखा के बारे में जानकारी भी। bundle : चर हम कस्टम वैरिएबल को परिभाषित करने और अपनी कॉन्फ़िगरेशन फ़ाइल को अधिक पुन: प्रयोज्य बनाने के लिए मैपिंग का उपयोग कर सकते हैं। उदाहरण के लिए, हम किसी मौजूदा क्लस्टर की आईडी के लिए एक वैरिएबल घोषित करते हैं और इसे विभिन्न वर्कफ़्लो में उपयोग करते हैं। अब, यदि आप किसी भिन्न क्लस्टर का उपयोग करना चाहते हैं, तो आपको बस वैरिएबल मान बदलना होगा। variables : संसाधन मैपिंग वह जगह है जहाँ हम अपने वर्कफ़्लो को परिभाषित करते हैं। इसमें निम्नलिखित मैपिंग में से प्रत्येक में से शून्य या एक शामिल है: , , और । यह मूल रूप से dbx प्रोजेक्ट में हमारी फ़ाइल है। हालाँकि कुछ छोटे अंतर हैं: resources experiments jobs models pipelines deployment.yml के लिए, हमें अपने व्हील पैकेज का पथ शामिल करना होगा; अन्यथा, डेटाब्रिक्स लाइब्रेरी नहीं ढूँढ सकता। आप DAB का उपयोग करके व्हील पैकेज बनाने के बारे में अधिक जानकारी पा सकते हैं। python_wheel_task यहाँ हम नोटबुक कार्यों को चलाने के लिए पूर्ण पथों के बजाय सापेक्ष पथों का उपयोग कर सकते हैं। नोटबुक को तैनात करने के लिए पथ उस फ़ाइल से सापेक्ष है जिसमें यह कार्य घोषित किया गया है। databricks.yml : लक्ष्य मैपिंग वह जगह है जहाँ हम अपनी परियोजनाओं के विभिन्न चरणों/वातावरणों के विन्यास और संसाधनों को परिभाषित करते हैं। उदाहरण के लिए, एक सामान्य CI/CD पाइपलाइन के लिए, हमारे पास तीन लक्ष्य होंगे: विकास, स्टेजिंग और उत्पादन। प्रत्येक लक्ष्य में चाइल्ड मैपिंग के रूप में सभी शीर्ष-स्तरीय मैपिंग ( छोड़कर) शामिल हो सकते हैं। यहाँ लक्ष्य मैपिंग ( ) की स्कीमा दी गई है। 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: ... चाइल्ड मैपिंग हमें डिफ़ॉल्ट कॉन्फ़िगरेशन को ओवरराइड करने की अनुमति देती है जिसे हमने पहले शीर्ष-स्तरीय मैपिंग में परिभाषित किया था। उदाहरण के लिए, यदि हम अपनी CI/CD पाइपलाइन के प्रत्येक चरण के लिए एक अलग डेटाब्रिक्स वर्कस्पेस रखना चाहते हैं, तो हमें प्रत्येक लक्ष्य के लिए वर्कस्पेस चाइल्ड मैपिंग सेट करनी चाहिए। workspace: profile: my-default-profile targets: dev: default: true test: workspace: host: https://<staging-workspace-url> prod: workspace: host: https://<production-workspace-url> शामिल करना: मैपिंग हमें अपनी कॉन्फ़िगरेशन फ़ाइल को अलग-अलग मॉड्यूल में विभाजित करने की अनुमति देती है। उदाहरण के लिए, हम अपने संसाधनों और चर को फ़ाइल में सहेज सकते हैं और इसे अपनी फ़ाइल में आयात कर सकते हैं। 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 कॉन्फ़िगरेशन के अधिक विस्तृत विवरण के लिए देखें डेटाब्रिक्स एसेट बंडल कॉन्फ़िगरेशन वर्कफ़्लो वर्कफ़्लो बिल्कुल वैसा ही है जैसा मैंने पिछले ब्लॉग में बताया था। अंतर केवल आर्टिफैक्ट्स और फ़ाइलों के स्थान का है। परियोजना का ढांचा अंतिम परियोजना कुछ इस प्रकार दिखती है 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 सत्यापित करें, तैनात करें और चलाएं अब, अपना टर्मिनल खोलें और रूट निर्देशिका से निम्नलिखित कमांड चलाएँ: सबसे पहले, हमें यह जांचना चाहिए कि हमारी कॉन्फ़िगरेशन फ़ाइल में सही फ़ॉर्मेट और सिंटैक्स है या नहीं। अगर सत्यापन सफल होता है, तो आपको बंडल कॉन्फ़िगरेशन का JSON प्रतिनिधित्व मिलेगा। किसी त्रुटि के मामले में, इसे ठीक करें और JSON फ़ाइल प्राप्त होने तक कमांड को फिर से चलाएँ। मान्य करें: databricks bundle validate तैनाती में पायथन व्हील पैकेज का निर्माण करना और इसे हमारे डेटाब्रिक्स कार्यक्षेत्र में तैनात करना, नोटबुक और अन्य फ़ाइलों को हमारे डेटाब्रिक्स कार्यक्षेत्र में तैनात करना और हमारे डेटाब्रिक्स वर्कफ़्लो में नौकरियों का निर्माण करना शामिल है। तैनाती: databricks bundle deploy यदि कोई कमांड विकल्प निर्दिष्ट नहीं है, तो डेटाब्रिक्स CLI बंडल कॉन्फ़िगरेशन फ़ाइलों के भीतर घोषित डिफ़ॉल्ट लक्ष्य का उपयोग करता है। यहाँ, हमारे पास केवल एक लक्ष्य है इसलिए इससे कोई फर्क नहीं पड़ता, लेकिन इसे प्रदर्शित करने के लिए, हम फ़्लैग का उपयोग करके एक विशिष्ट लक्ष्य को भी तैनात कर सकते हैं। -t dev तैनात जॉब्स को चलाएं। यहां, हम निर्दिष्ट कर सकते हैं कि हम कौन सी जॉब चलाना चाहते हैं। उदाहरण के लिए, निम्न कमांड में, हम dev लक्ष्य में जॉब चलाते हैं। रन: test_job databricks bundle run -t dev test_job आउटपुट में आपको एक यूआरएल मिलता है जो आपके कार्यक्षेत्र में चल रहे कार्य की ओर इशारा करता है। आप अपने डेटाब्रिक्स कार्यक्षेत्र के वर्कफ़्लो अनुभाग में भी अपनी नौकरियां पा सकते हैं। CI पाइपलाइन कॉन्फ़िगरेशन हमारी CI पाइपलाइन का सामान्य सेटअप पिछले प्रोजेक्ट जैसा ही रहता है। इसमें दो मुख्य चरण होते हैं: और । चरण में, यूनिट परीक्षण चलाता है और परीक्षण के लिए एक अलग वर्कफ़्लो तैनात करता है। परीक्षण चरण के सफल समापन पर सक्रिय किया गया चरण आपके मुख्य ETL वर्कफ़्लो की तैनाती को संभालता है। परीक्षण तैनाती परीक्षण unit-test-job तैनाती यहाँ, हमें Databricks CLI को स्थापित करने और प्रमाणीकरण प्रोफ़ाइल सेट अप करने के लिए प्रत्येक चरण से पहले अतिरिक्त चरण जोड़ने होंगे। हम इसे अपने CI पाइपलाइन के अनुभाग में करते हैं। कीवर्ड का उपयोग कमांड की एक सरणी को परिभाषित करने के लिए किया जाता है जिसे प्रत्येक जॉब के कमांड से पहले चलाया जाना चाहिए। इसके बारे में अधिक जानकारी पाई जा सकती है। before_script before_script script यहाँ वैकल्पिक रूप से, आप कीवर्ड का उपयोग करके कमांड की एक सरणी निर्धारित कर सकते हैं जिसे प्रत्येक कार्य के बाद चलाया जाना चाहिए। यहाँ, हम प्रत्येक कार्य के समाप्त होने के बाद सफाई करने के लिए उपयोग कर सकते हैं। सामान्य तौर पर, हमारी पाइपलाइन इन चरणों से गुज़रती है: after_project databricks bundle destroy --auto-approve डेटाब्रिक्स CLI स्थापित करें और कॉन्फ़िगरेशन प्रोफ़ाइल बनाएं। परियोजना का निर्माण करें. बिल्ड आर्टिफैक्ट्स को डेटाब्रिक्स वर्कस्पेस पर पुश करें। अपने क्लस्टर पर व्हील पैकेज स्थापित करें। डेटाब्रिक्स वर्कफ़्लोज़ पर नौकरियां बनाएं। नौकरियाँ चलाओ. हमारा इस प्रकार दिखता है: .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 टिप्पणियाँ यहां कुछ नोट्स दिए गए हैं जो आपको अपना बंडल प्रोजेक्ट सेट करने में मदद कर सकते हैं: इस ब्लॉग में, हमने अपना बंडल मैन्युअल रूप से बनाया है। मेरे अनुभव में, यह अंतर्निहित अवधारणाओं और सुविधाओं को बेहतर ढंग से समझने में मदद करता है। लेकिन अगर आप अपने प्रोजेक्ट को तेज़ी से शुरू करना चाहते हैं, तो आप डेटाब्रिक्स या अन्य पार्टियों द्वारा प्रदान किए गए डिफ़ॉल्ट और गैर-डिफ़ॉल्ट बंडल टेम्प्लेट का उपयोग कर सकते हैं। डिफ़ॉल्ट पायथन टेम्प्लेट के साथ प्रोजेक्ट शुरू करने के तरीके के बारे में जानने के लिए पोस्ट को देखें। इस डेटाब्रिक्स जब आप का उपयोग करके अपना कोड तैनात करते हैं, तो डेटाब्रिक्स CLI .py फ़ाइल का उपयोग करके आपके पैकेज को बनाने के लिए कमांड चलाता है। यदि आपके पास पहले से ही इंस्टॉल है, लेकिन आपकी मशीन के बजाय उपनाम का उपयोग करती है, तो आपको समस्याओं का सामना करना पड़ेगा। हालाँकि, इसे ठीक करना आसान है। उदाहरण के लिए, और कुछ समाधानों के साथ दो स्टैक ओवरफ़्लो थ्रेड हैं। databricks bundle deploy सेटअप python3 setup.py bdist_wheel python3 python3 python यहाँ यहाँ आगे क्या होगा अगले ब्लॉग पोस्ट में, मैं डेटाब्रिक्स पर मशीन लर्निंग प्रोजेक्ट कैसे शुरू करें, इस पर अपने पहले ब्लॉग पोस्ट से शुरुआत करूँगा। यह मेरी आगामी एंड-टू-एंड मशीन लर्निंग पाइपलाइन में पहला पोस्ट होगा, जिसमें विकास से लेकर उत्पादन तक सब कुछ शामिल होगा। बने रहें! साधन . इस ट्यूटोरियल के लिए रिपॉजिटरी सुनिश्चित करें कि आपने में cluster_id को अपडेट कर दिया है resources/dev_jobs.yml dbx से बंडलों पर माइग्रेट करें | AWS पर डेटाब्रिक्स डेटाब्रिक्स एसेट बंडल्स विकास कार्य | AWS पर डेटाब्रिक्स डेटाब्रिक्स एसेट बंडल परिनियोजन मोड | AWS पर डेटाब्रिक्स डेटाब्रिक्स एसेट बंडल का उपयोग करके पायथन व्हील विकसित करें | AWS पर डेटाब्रिक्स डेटाब्रिक्स एसेट बंडल: डेटाब्रिक्स पर डेटा उत्पादों को तैनात करने के लिए एक मानक, एकीकृत दृष्टिकोण (youtube.com) रेपो और स्लाइड्स https://github.com/databricks/databricks-asset-bundles-dais2023