跳到主要內容< / >
工程的博客

使用Databricks實驗室CI/CD模板在Databricks上自動化持續集成和持續交付

內容

概述

Databricks Labs持續集成和持續部署(CI/CD)模板是一個開源工具,它使軟件開發團隊可以輕鬆地將現有的CI工具與Databricks作業一起使用。此外,它還包含了包含Databricks最佳實踐的管道模板,可以在Azure和AWS上運行,這樣開發人員就可以專注於編寫重要的代碼,而不必從頭開始設置完整的測試、集成和部署係統。

3步CI/CD模板:

  1. PIP安裝餅幹切割器
  2. cookiecutter https://github.com/databrickslabs/cicd-templates.git
    • 在終端中回答交互式問題,例如您想使用哪個雲,然後您就有了一個完整的工作管道。
    • PIP安裝databricks_cli && databricks配置——token
    • 在Databricks上運行。/ run_pipeline.py管道在您的項目主目錄中
  3. 將您的databricks令牌和工作區URL添加到github secrets,並將您的管道提交到github repo。

您的Databricks Labs CI/CD管道現在將自動運行針對Databricks的測試,每當您向倉庫中提交新內容時。當你準備好部署你的代碼時,做一個github發布,模板會自動打包並將你的管道作為一個作業部署到數據庫。

就是這樣!現在您有了一個可伸縮的工作管道,您的開發團隊可以使用並在此基礎上進行開發。此外,您可以隨時修改模板,使其更適合您的團隊或用例,以確保將來的項目可以輕鬆地建立起來。

在這篇文章的剩餘部分,我們將深入探討為什麼我們決定創建Databricks Labs CI/CD模板,項目的未來計劃是什麼,以及如何貢獻。

為什麼我們還需要另一個部署框架?

隨著Databricks上的項目越來越大,Databricks用戶可能會發現自己很難跟上包含ETL、數據科學實驗、儀表板等的眾多筆記本。雖然有各種短期解決方法,例如使用%run命令從當前筆記本中調用其他筆記本,但是遵循傳統的軟件工程最佳實踐將可重用代碼與調用該代碼的管道分離是有用的。此外,圍繞管道構建測試以驗證管道也在工作,這是邁向生產級開發過程的另一個重要步驟。

最後,能夠在新的代碼更改時自動運行作業,而不必手動觸發作業或在集群上手動安裝庫,這對於實現整個管道的可伸縮性和穩定性非常重要。總之,為了擴展和穩定我們的生產管道,我們希望從在筆記本中手動運行代碼轉向使用傳統的軟件工程工具(如ide和持續集成工具)自動打包、測試和部署我們的代碼。

事實上,越來越多的數據團隊正在使用Databricks作為他們工作負載的運行時,他們更喜歡使用傳統的軟件工程實踐來開發他們的管道:使用ide、GIT和傳統的CI/CD管道。這些團隊通常喜歡用單元測試來覆蓋他們的數據處理邏輯,並在版本控製係統的每次更改之後執行集成測試。

發布過程也使用版本控製係統進行管理:在PR被合並到發布分支中之後,可以執行集成測試,並且在得到積極結果的情況下,也可以更新部署管道。將新版本的管道引入生產工作區也是一個複雜的過程,因為它們可能有不同的依賴關係,比如配置構件、python和/或maven庫以及其他依賴關係。在大多數情況下,不同的管道可以依賴於同一工件的不同版本。

通過可重用模板簡化Databricks上的CI/CD

許多組織已經投入了大量資源為不同的項目構建自己的CI/CD管道。所有這些管道都有很多共同點:基本上,它們構建、部署和測試一些工件。在過去,在CI工具使大多數任務過時之前,開發人員也投入了大量時間開發用於構建、測試和部署應用程序的不同腳本:CI工具引入的約定使開發人員能夠以抽象的方式實現大多數任務的框架,從而可以將它們應用到遵循這些約定的任何項目中。例如,Maven在Java開發中引入了這樣的約定,這使得自動化大部分構建過程成為可能,這些過程是在龐大的ant腳本中實現的。

Databricks實驗室CI/CD模板可以很容易地使用現有的CI/CD工具,如Jenkins,與Databricks;模板包含根據Databricks最佳實踐創建的預製代碼管道。此外,模板允許團隊將他們的CI/CD管道打包成可重用的代碼,以簡化未來項目的創建和部署。Databricks實驗室CI/CD模板為數據工程和數據科學項目引入了類似的約定,為使用Databricks的數據從業者提供了抽象工具,用於為他們的數據應用程序實現CI/CD管道。

讓我們更深入地了解我們介紹過的慣例。大多數數據處理邏輯,包括數據轉換、特征生成邏輯、模型訓練等,都應該在python包中開發。這種邏輯可以在許多可以作為作業調度的生產管道中使用。前麵提到的邏輯也可以使用測試單個轉換功能和集成測試的本地單元測試進行測試。集成測試在Databricks工作空間上運行,可以將數據管道作為一個整體進行測試。

使用Databricks部署的開發生命周期

數據工程師和數據科學家可以依靠Databricks實驗室CI/CD模板來測試和部署他們在本地Databricks的ide中開發的代碼。Databricks Labs CI/CD Templates為用戶提供了可重用的數據項目模板,可用於快速啟動新數據用例的開發。該項目將具有以下結構:

Databricks Labs的可重用數據項目模板的結構使開發人員可以輕鬆地快速啟動新數據用例的開發。

數據攝取、驗證和轉換邏輯,以及特征工程和機器學習模型,都可以在python包中開發。這種邏輯可以被生產管道利用,並通過開發人員和集成測試進行測試。Databricks Labs CI/CD模板可以將生產管道部署為Databricks job;自動包括所有依賴項這些管道必須放在“管道”目錄中,並且可以有它們自己的依賴集,包括不同的庫和配置構件。開發人員可以利用Apache Spark或Databricks Connect的本地模式來測試代碼,同時在筆記本電腦上安裝IDE進行開發。如果他們想在Databricks上運行這些管道,他們可以使用Databricks Labs CI/CD Templates CLI。開發人員還可以利用CLI在Databricks上啟動項目當前狀態的集成測試。

之後,用戶可以將更改推送到GitHub,在那裏他們將使用GitHub Actions配置在Databricks上自動測試。每次推送之後,GitHub Actions都會啟動一個VM,該VM會檢出項目的代碼,並在該VM中運行本地pytest測試。如果這些測試成功,它將構建python wheel並將其部署到Databricks的所有其他依賴項上,並在Databricks上運行開發人員測試。

在開發周期結束時,可以通過創建GitHub版本將整個項目部署到生產環境中,該版本將在Databricks中啟動集成測試,並將生產管道部署為Databricks作業。在這種情況下,CI/CD管道看起來與前一個類似,但不是開發人員測試,而是集成測試將在Databricks上運行,如果它們成功了,Databricks上的生產作業規範將被更新。

如何在10分鍾內使用Databricks Labs CI/CD模板創建和部署新的數據項目?

使用Databricks Labs CI/CD Templates項目模板創建一個新項目

  • 安裝cookecutter python包:PIP安裝餅幹切割器
  • 使用我們的cookecutter模板創建您的項目:cookiecutter https://github.com/databrickslabs/cicd-templates.git
  • 回答問題…

之後,將為您創建新項目。它將具有以下結構:


              ├──cicd_demo│├──__init__.py│├──├││├──__init__.py││├──make_dataset.py│├──├││├──__init__.py││├──build_features.py│├──models││├──__init__.py││├──predict_model.py││cat_model .py│├──├─├│├──__init__.py│├──├─├├──create_cluster.py├──部署││├──databrickslabs_mlflowdepl-0.2.0-py3-none -任何.whl├──deployment.yaml├──dev-tests│├──├─├││├──jo_spec_aws .json││├──jo_spec_azure .json││飛濺器│飛濺器│├──pipeline2 .││├──jo_spec_aws .json│├──www.catsound.org│││├──文檔│├──Makefile│├──├│├──conf.py│├──rammstein│├──index.rst│├──make.bat├──集成測試│├──├─├││├──jo_spec_aws .json││├──jo_spec_azure .json││飛濺器│飛濺器│├──pipeline2 .││├──jo_spec_aws .json│├──www.catsound.org│││├──筆記本├──管道│├──├─├││├──jo_spec_aws .json││├──jo_spec_azure .json││飛濺器│飛濺器│├──pipeline2 .││├──jo_spec_aws .json│├──www.catsound.org│││├──讓├──run_pipeline.py├──runtime_requirements.txt├──setup . py└──測試└──test_smth.py< / >

我們創建的項目的名稱是' cicd_demo ',所以python包的名稱也是' cicd_demo ',所以我們的轉換邏輯將在' cicd_demo '目錄下開發。它可以從管道中使用,管道將被放置在“管道”目錄下。在' pipelines '目錄中,我們可以開發許多管道,每個管道都在自己的目錄中。

每個管道必須有一個入口點python腳本,必須命名為' pipeline_runner.py '。在這個項目中,我們可以看到創建了兩個示例管道。每個管道都有python腳本和每個支持雲的作業規範json文件。這些文件可用於定義集群規範(例如,節點數量、實例類型等)、作業調度設置等。

“Dev-tests”和“integration-tests”目錄用於定義測試Databricks中的管道的集成測試。它們還應該利用python包中開發的邏輯並計算轉換的結果。

讓我們將項目部署到目標Databricks工作區

Databricks deployment與GitHub Actions緊密集成。我們需要創建一個新的GitHub存儲庫,在那裏我們可以推送我們的代碼,在那裏我們可以使用GitHub Actions來自動測試和部署我們的管道。為了將GitHub存儲庫與Databricks工作空間集成,工作空間URL和個人認證令牌(PAT)必須配置為GitHub機密。工作空間URL必須配置為DATABRICKS_HOST secret,令牌必須配置為DATABRICKS_TOKEN。

現在我們可以在項目目錄中初始化一個新的git存儲庫。之後,我們可以將所有文件添加到git中,並將它們推送到遠程GitHub存儲庫。在我們配置好令牌並進行第一次推送之後,GitHub Actions將在目標Databricks工作區上自動運行dev-test,如果測試成功,我們的第一次提交將被標記為綠色。

通過運行run_pipeline.py腳本,可以從本地環境啟動生產管道的運行或在Databricks上的單獨測試:

/run_pipeline.py管道——pipeline-name test_pipeline
這個命令將從Databricks的管道文件夾中運行test_pipeline。

使用Databricks部署進行自動化測試

新創建的項目預先配置了兩個標準的CI/CD管道:其中一個為每次推送執行,並在Databricks工作空間上運行開發測試。

另一個是為每個創建的GitHub版本運行,並在Databricks工作區上運行集成測試。如果集成測試的結果是肯定的,那麼生產管道將作為作業部署到Databricks工作區。


使用Databricks部署部署生產管道

為了將管道部署到生產工作區,可以創建GitHub發布。它將自動啟動集成測試,如果測試結果是肯定的,生產管道將作為作業部署到Databricks工作區。在第一次運行期間,作業將在Databricks工作區中創建。在後續版本中,將更新現有作業的定義。

依賴關係和配置管理

Databricks部署在兩個層麵上支持依賴管理:

  • 項目級別:
    • 在生產運行時需要的項目級python包依賴項可以放在runtime_requiremnets.txt中
    • 也可以使用項目級JAR或Python Whl依賴項。它們可以放在dependencies/jars和dependencies/wheels目錄中。
  • 管道的依賴關係:
    • 管道級python/maven/其他依賴可以直接在庫部分的作業規範json中指定
    • jar和wheels可以分別放在pipeline文件夾的dependencies/ Jars和dependencies/wheels目錄下

配置文件可以放在管道目錄中。它們將與python腳本一起記錄到MLflow中。在Databricks中執行期間,作業腳本將接收管道文件夾的路徑作為第一個參數。此參數可用於打開管道目錄中存在的任何文件。

讓我們用下麵的例子來討論如何使用Databricks部署來管理依賴關係:


              ├──依賴性│├──壇子││├──direct_deep .jar│││輪子││──someotherwheel-0.1.0-py3-none -任何.whl├──job_spec_aws.json├──job_spec_azure.json├──pipeline_runner.py└──train_config.yaml

這個管道在管道級別上有兩個依賴項:一個jar文件和一個輪子。Train_config。Yaml文件包含配置參數,管道可以使用以下代碼讀取:

defread_config名字,根):試一試Filename = root.replace(“dbfs:”' / dbfs ') +' / '+名字開放(文件名)作為conf_file:Conf = yaml。負載(conf_file裝載機= yaml.FullLoader)返回相依除了FileNotFoundError作為艾凡:提高FileNotFoundError (f”{e}.請附上配置文件!”Conf = read_config(“train_config.yaml”, sys.argv [1])

展望和後續步驟

Databricks部署的進一步發展有不同的方向。我們正在考慮擴展我們提供模板的一組CI/CD工具。到目前為止,它隻是GitHub Actions,但我們可以添加一個與CircleCI或Azure DevOps集成的模板。

另一個方向是支持Scala中的管道開發。

如何貢獻?

Databricks Labs CI/CD模板是一個開源工具,我們非常歡迎您的貢獻。歡迎您提交PR!

免費試用Databricks

相關的帖子

看到所有工程的博客的帖子< / >
Baidu
map