分享方式:


使用 Databricks Asset Bundles 在 Azure Databricks 上開發作業

Databricks Asset Bundles (也稱為套件組合) 包含您想要部署的成品以及 Azure Databricks 資源的設定,例如您想要執行的工作,並可讓您以程式設計方式予以驗證、部署和執行。 請參閱什麼是 Databricks Asset Bundles?

本文說明如何建立套件組合,以程式設計方式管理工作。 請參閱排程及協調工作流程。 套件組合是使用適用於 Python 的 Databricks Asset Bundles 預設套件組合範本建立的,該範本包含與工作定義 (用於執行筆記本) 配對的筆記本。 接著,您會在 Azure Databricks 工作區中驗證、部署和執行已部署的工作。

提示

如果您有使用 Azure Databricks 工作使用者介面或 API 建立的現有工作,並想要將其移至套件組合,則必須在套件組合的設定檔中加以定義。 Databricks 建議您先使用下列步驟建立套件組合,然後驗證套件組合是否運作。 接著,您可以將其他工作定義、筆記本和其他來源新增至套件組合。 請參閱將現有的工作定義新增至套件組合

需求

  • Databricks CLI 0.218.0 版或更新版本。 若要檢查您已安裝的 Databricks CLI 版本,請執行命令 databricks -v。 若要安裝 Databricks CLI,請參閱安裝或更新 Databricks CLI
  • 遠端 Databricks 工作區必須已啟用工作區檔案。 請參閲工作區檔案是什麼?

使用專案範本建立套件組合

首先,使用 Databricks Asset Bundles 預設 Python 範本建立套件組合。 如需套件組合範本的詳細資訊,請參閱 Databricks Asset Bundle 專案範本

如果您想要從頭開始建立套件組合,請參閱手動建立套件組合

步驟 1:設定驗證

在此步驟中,您會在開發電腦上的 Databricks CLI 與 Azure Databricks 工作區之間設定驗證。 本文假設您想要使用 OAuth 使用者對機器 (U2M) 驗證,以及名為 DEFAULT 的對應 Azure Databricks 組態設定檔進行驗證。

注意

U2M 驗證適用於即時試用這些步驟。 針對完全自動化的工作流程,Databricks 建議您改用 OAuth 機器對機器 (M2M) 驗證。 請參閱驗證中的 M2M 驗證設定指示。

  1. 針對每個目標工作區執行下列命令,使用 Databricks CLI 在本機起始 OAuth 權杖管理。

    在下列命令中,將 <workspace-url> 取代為您的 Azure Databricks 個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net

    databricks auth login --host <workspace-url>
    
  2. Databricks CLI 會提示您儲存輸入為 Azure Databricks 組態設定檔的資訊。 按 Enter 以接受建議的設定檔名稱,或輸入新或現有設定檔的名稱。 任何具有相同名稱的現有設定檔,會以您輸入的資訊覆寫。 您可使用設定檔,在多個工作區之間快速切換驗證內容。

    若要取得任何現有設定檔的清單,請在個別的終端機或命令提示字元中,使用 Databricks CLI 來執行 databricks auth profiles 命令。 若要檢視特定設定檔的現有設定,請執行 databricks auth env --profile <profile-name> 命令。

  3. 在網頁瀏覽器中,完成畫面上的指示,登入 Azure Databricks 工作區。

  4. 若要檢視設定檔目前的 OAuth 權杖值和權杖即將到期的時間戳記,請執行下列其中一個命令:

    • databricks auth token --host <workspace-url>
    • databricks auth token -p <profile-name>
    • databricks auth token --host <workspace-url> -p <profile-name>

    如果您有多個具有相同 --host 值的設定檔,您可能需要一起指定 --host-p 選項,以協助 Databricks CLI 尋找正確的相符 OAuth 權杖資訊。

步驟 2:初始化套件組合

使用預設的 Python 套件組合專案範本初始化套件組合。

  1. 使用終端機或命令提示字元,切換至本機開發電腦上的目錄,其中包含範本產生的套件組合。

  2. 使用 Databricks CLI 執行 bundle init 命令:

    databricks bundle init
    
  3. 針對 Template to use,按 Enter,保留 default-python 的預設值。

  4. 針對 Unique name for this project,保留 my_project 的預設值,或輸入不同的值,然後按 Enter。 這會決定此套件組合的根目錄名稱。 此根目錄是在您目前的工作目錄中建立的。

  5. 針對 Include a stub (sample) notebook,選取 yes 並按 Enter

  6. 針對 Include a stub (sample) DLT pipeline,選取 no 並按 Enter。 這會指示 Databricks CLI 不要在套件組合中定義範例 Delta Live Tables 管線。

  7. 針對 Include a stub (sample) Python package,選取 no 並按 Enter。 這會指示 Databricks CLI 不要將範例 Python Wheel 套件檔案或相關的建置指示新增至套件組合。

步驟 3:探索套件組合

若要檢視範本產生的檔案,請切換至新建立套件組合的根目錄。 特別值得注意的檔案如下所示:

  • databricks.yml:此檔案會指定套件組合的程式設計名稱,包括工作定義的參考,以及指定目標工作區的相關設定。
  • resources/<project-name>_job.yml:此檔案會指定工作的設定,其中包括預設筆記本任務。
  • src/notebook.ipynb:此檔案是範例筆記本,執行時,只需初始化包含數字 1 到 10 的 RDD 即可。

針對自訂工作,工作宣告中的對應會對應至 REST API 參照中 POST /api/2.1/jobs/create 中所述的建立工作作業的要求酬載 (以 YAML 格式表示)。

提示

您可以使用覆寫 Databricks Asset Bundles 中的叢集設定中所述的技術來定義、合併和覆寫套件組合中新工作叢集的設定。

步驟 4:驗證專案的套件組合設定檔

在此步驟中,您會檢查套件組合設定是否有效。

  1. 從根目錄,使用 Databricks CLI 執行 bundle validate 命令,如下所示:

    databricks bundle validate
    
  2. 如果傳回套件組合設定的摘要,則驗證成功。 如果傳回任何錯誤,請修正錯誤,然後重複此步驟。

如果您在此步驟後對套件組合進行任何變更,您應該重複此步驟,以檢查套件組合設定是否仍然有效。

步驟 5:將本機專案部署至遠端工作區

在此步驟中,您會將本機筆記本部署至遠端 Azure Databricks 工作區,並在工作區內建立 Azure Databricks 工作。

  1. 從套件組合根目錄,使用 Databricks CLI 執行 bundle deploy 命令,如下所示:

    databricks bundle deploy -t dev
    
  2. 檢查是否已部署本機筆記本:在 Azure Databricks 工作區的側邊欄中,按下 [工作區]

  3. 按下 [使用者 ><your-username>> .bundle ><project-name>> 開發 > 檔案 > src] 資料夾。 筆記本應該位於此資料夾中。

  4. 檢查是否已建議工作:在 Azure Databricks 工作區的側邊欄中,按下 [工作流程]

  5. 在 [工作] 索引標籤上,按下 [開發 <your-username>] <project-name>_job

  6. 按下 [任務] 索引標籤。應該有一個任務:notebook_task

如果您在此步驟後對套件組合進行任何變更,您應該重複步驟 4-5,以檢查套件組合設定是否仍然有效,然後重新部署專案。

步驟 6:執行部署的專案

在此步驟中,您會從命令列觸發工作區中 Azure Databricks 工作的執行。

  1. 從根目錄,使用 Databricks CLI 執行 bundle run 命令 (如下所示),將 <project-name> 取代 為步驟 2 中的專案名稱:

    databricks bundle run -t dev <project-name>_job
    
  2. 複製終端機中顯示的 Run URL 的值,並將此值貼到您的網頁瀏覽器中,以開啟您的 Azure Databricks 工作區。 請參閱檢視及執行使用 Databricks Asset Bundle 建立的工作

  3. 在 Azure Databricks 工作區中,在工作任務順利完成並顯示綠色標題列後,按下工作任務以查看結果。

如果您在此步驟後對套件組合進行任何變更,您應該重複步驟 4-6,以檢查套件組合設定是否仍然有效,重新部署專案並執行重新部署的專案。

步驟 7:清理

在此步驟中,您會從工作區中刪除已部署的筆記本和工作。

  1. 從根目錄,使用 Databricks CLI 執行 bundle destroy 命令,如下所示:

    databricks bundle destroy -t dev
    
  2. 確認工作刪除要求:提示您永久終結資源時,請輸入 y 並按 Enter

  3. 確認筆記本刪除要求:提示您永久終結先前部署的資料夾及其所有檔案時,請輸入 y 並按 Enter

  4. 如果您也想要從開發電腦刪除套件組合,您現在可以刪除步驟 2 中建立的本機目錄。

將現有的工作定義新增至套件組合

您可以使用現有的工作作為基礎,在套件組合設定檔中定義工作。 若要取得現有的工作定義,您可以使用 UI 手動擷取,或使用 Databricks CLI 以程式設計方式產生。

如需套件組合中工作定義的相關資訊,請參閱工作

使用 UI 取得現有的工作定義

若要從 Azure Databricks 工作區 UI 取得現有工作定義的 YAML 表示法:

  1. 在 Azure Databricks 工作區的側邊欄中,按下 [工作流程]

  2. 在 [工作] 索引標籤上,按下工作的 [名稱] 連結。

  3. 在 [立即執行] 按鈕旁邊,按下 "kebab",然後按下 [切換至程式碼 (YAML)]

  4. 將您複製的 YAML 新增到套件組合的 databricks.yml 檔案中,或在套件組合專案的 resources 目錄中為您的工作建立設定檔,並從您的 databricks.yml 檔案中參考它。 請參閱 (/dev-tools/bundles/settings.md#resources)。

  5. 將現有工作中參考的任何 Python 檔案和筆記本下載並新增至套件組合的專案來源。 一般而言,套件組合成品位於套件組合的 src 目錄中。

    提示

    您可以從 Azure Databricks 筆記本使用者介面按下 [檔案] > [匯出] > "IPython Notebook",將現有的筆記本從 Azure Databricks 工作區匯出為 .ipynb 格式。

    將筆記本、Python 檔案和其他成品新增至套件組合後,請確定您的工作定義正確參考它們。 例如,針對套件組合的 src 目錄中名為 hello.ipynb 的筆記本:

    resources:
      jobs:
        hello-job:
          name: hello-job
          tasks:
          - task_key: hello-task
            notebook_task:
              notebook_path: ../src/hello.ipynb
    

使用 Databricks CLI 產生現有的工作定義

若要以程式設計方式產生現有工作的套件組合設定:

  1. 從工作 UI 中工作的 [工作詳細資料] 側面板擷取現有工作的識別碼,或使用 Databricks CLI databricks jobs list 命令。

  2. 執行 bundle generate job Databricks CLI 命令,設定工作識別碼:

    databricks bundle generate job --existing-job-id 6565621249
    

    此命令會在套件組合的 resources 資料夾中為工作建立套件組合設定檔,並將任何參考的 Artifacts 下載到 src 資料夾中。

    提示

    如果您先使用 bundle deployment bind 將某個套件組合中的資源繫結至工作區中,則工作區中的資源將基根據在下一次 bundle deploy 之後繫結的套件組合所定義的設定進行更新。 如需 bundle deployment bind 的資訊,請參閱繫結套件組合資源

設定使用無伺服器計算的工作

下列範例示範套件組合設定,以建立使用無伺服器計算的工作。

若要使用無伺服器計算來執行包含筆記本任務的工作,請省略套件組合設定檔中的 job_clusters 設定。

# yaml-language-server: $schema=bundle_config_schema.json
bundle:
  name: baby-names

resources:
  jobs:
    retrieve-filter-baby-names-job-serverless:
      name: retrieve-filter-baby-names-job-serverless
      tasks:
        - task_key: retrieve-baby-names-task
          notebook_task:
            notebook_path: ./retrieve-baby-names.py
        - task_key: filter-baby-names-task
          depends_on:
            - task_key: retrieve-baby-names-task
          notebook_task:
            notebook_path: ./filter-baby-names.py

  targets:
    development:
      workspace:
        host: <workspace-url>

若要使用無伺服器計算來執行包含 Python 任務的工作,請包含 environments 設定。

# yaml-language-server: $schema=bundle_config_schema.json
bundle:
  name: serverless-python-tasks

resources:
jobs:
  serverless-python-job:
    name: serverless-job-with-python-tasks

    tasks:
      - task_key: wheel-task-1
        python_wheel_task:
          entry_point: main
          package_name: wheel_package
        environment_key: Default

    environments:
      - environment_key: Default
        spec:
          client: "1"
          dependencies:
            - workflows_authoring_toolkit==0.0.1

targets:
  development:
    workspace:
      host: <workspace-url>

請參閱使用適用於工作流程的無伺服器計算來執行 Azure Databricks 工作