排程及協調工作流程
Databricks 工作流程具備工具,可讓您排程及協調 Azure Databricks 上的資料處理工作。 您使用 Databricks 工作流程來設定 Databricks 作業。
本文介紹了使用 Databricks 作業管理生產工作負載的相關概念與選擇。
什麼是 Databricks 作業?
作業是排程和協調 Azure Databricks 上生產工作負載的主要單位。 作業包含了一或多個工作。 工作和作業一起可讓您設定及部署下列專案:
- 自訂邏輯,包括 Spark、SQL、OSS Python、ML 和任意程式碼。
- 使用自訂環境和連結庫計算資源。
- 排程和執行工作負載的觸發程序。
- 工作之間控制項流程的條件式邏輯。
作業提供者方法,以定義工作之間的關聯性。 Delta Live Tables 管線提供宣告式方法來定義資料集與轉換之間的關聯性。 您可以將 Delta Live Tables 管線當做工作包含在作業中。 請參閱Delta Live Tables 管線工作的作業。
作業的複雜性各不相同,從執行 Databricks 筆記本的單一工作,到執行條件式邏輯和相依性的數千個工作。
如何設定和執行作業?
您可使用作業 UI、Databricks CLI,或叫用作業 API 來建立和執行作業。 可以使用 UI 或 API 修復並重新執行失敗或取消的作業。 您可以使用 UI、CLI、API 和通知來監視作業執行結果 (例如,電子郵件、Webhook目的地或 Slack 通知)。
如果您想要使用基礎結構即程式碼 (IaC) 方法來設定及協調您的作業,請使用 Databricks 資產組合 (DAB)。 套件組合可以包含作業和工作的 YAML 定義、使用 Databricks CLI 來管理,而且可以在不同的目標工作區中共用和執行 (例如開發、預備和生產環境)。 若要瞭解如何使用 DAB 來設定及協調您的作業,請參閱 Databricks 資產套件組合。
若要了解如何使用 Databricks CLI,請參閱什麼是 Databricks CLI?。 若要了解如何使用工作 API,請參閱工作 API。
作業所需的最低組態為何?
Azure Databricks 上的全部作業都需要下列各項:
- 原始程式碼 (例如 Databricks 筆記本),其中包含要執行的邏輯。
- 執行邏輯的計算資源。 計算資源可以是無伺服器計算、傳統作業計算,或通用計算。 請參閱設定作業的計算。
- 作業應該執行的指定排程。 您可以選擇性地省略設定排程,並手動觸發作業。
- 唯一名稱。
注意
如果您在 Databricks 筆記本中開發程式碼,可以使用 [排程] 按鈕,將該筆記本設定為作業。 請參閱建立及管理排程作業。
什麼是工作?
工作代表作業中執行微一個步驟的邏輯單位。 工作的複雜程度不一,包括下列各項:
- 筆記本
- JAR
- SQL 查詢
- DLT 管線
- 另一個工作
- 控制流程工作
您可以藉由指定工作之間的相依性來控制工作的執行順序。 您可以設定工作,依順序或平行執行。
作業會與工作的狀態資訊和中繼資料互動,但工作範圍是孤立的。 您可使用工作值來共用排程工作之間的內容。 請參閱使用工作值在工作之間傳遞資訊。
哪些控制項流程選項可供作業使用?
當在作業內設定作業和工作時,可以自訂設定,以控制整個作業和個別工作的執行方式。 這些選項包括:
觸發程序類型
設定作業時,必須指定觸發程式類型。 您可以選擇下列觸發程序類型:
您也可以選擇手動觸發作業,但這主要是保留給特定的使用案例,例如:
- 您可以使用外部協調流程工具,使用 REST API 呼叫來觸發作業。
- 您有一個很少執行的工作,需要手動介入進行驗證或解決資料品質問題。
- 您正執行只需要執行一次或幾次的工作負載,例如移轉。
請參閱 Databricks 作業的觸發程序類型。
重試
當作業失敗並出現錯誤訊息時,重試會指定應重新執行特定作業或工作的次數。 錯誤通常是暫時性的,且透過重新啟動來解決。 Azure Databricks 上的某些功能,例如使用結構化串流進行結構描述演進,假設您使用重試來執行作業,以重設環境,並允許工作流程繼續進行。
如果您指定工作的重試次數,如果遇到錯誤,工作最多會重新啟動指定的次數。 並非所有作業組態都支援工作重試。 請參閱設定重試原則。
在連續觸發程序模式中執行時,Databricks 會自動使用指數輪詢重試。 請參閱如何處理連續作業的失敗?。
執行 if 條件式工作
您可以使用 [執行 if] 工作類型,以根據其他工作的結果來指定後續工作的條件。 您將工作新增至作業,並指定上游相依性工作。 根據這些工作的狀態,可以設定要執行的一或多個下游工作。 作業支援下列相依性:
- 全部皆已成功
- 至少有一項成功
- 無失敗
- 已全部完成
- 至少一項失敗
- 全部失敗
請參閱設定工作相依性
If/else 條件式工作
您可使用 If/else 工作類型,根據某些值來指定條件式。 請參閱在具有 If/else 工作的作業中新增分支邏輯。
作業支援 taskValues
您在邏輯內定義,並讓您可將某些計算或狀態的結果從工作傳回作業環境。 您可針對 、作業參數或動態值定義 taskValues
條件。
Azure Databricks 支援下列條件式的運算元:
==
!=
>
>=
<
<=
另請參閱:
針對每個任務
使用 For each
任務在迴圈中執行另一個任務,將一組不同的參數傳遞至任務的每個反覆項目。
將 For each
工作新增至作業需要定義兩個工作:For each
工作和巢狀工作。 巢狀工作是針對 For each
工作的每個反覆項目執行的工作,而且是其中一個標準 Databricks 作業工作類型。 支援透過多個方法將參數傳遞至巢狀工作。
請參閱在迴圈中執行參數化 Azure Databricks 工作任務。
工期閾值
如果超過指定的工期,可以指定傳送警告或停止工作或作業的工期閾值。 您可能要設定此設定的範例包括下列項目:
- 您有容易陷入無回應狀態的工作。
- 對於超過工作流程的 SLA,您必須警告工程師。
- 為避免預期之外的成本,您會想要讓設定為大型叢集的作業失敗。
請參閱 設定作業執行持續時間的臨界值或串流待辦項目計量 和 設定工作執行持續時間的臨界值或串流待辦項目計量。
並行
大部分作業都使用預設並行為 1 個並行作業來設定。 這意味著,如果先前的作業執行未在應觸發新作業時完成,則會略過下一個作業執行。
增加並行存取有一些使用案例,但大部分工作負載都不需要改變此設定。
如需設定並行的詳細資訊,請參閱 Databricks 作業佇列和並行設定。
如何監視作業?
作業 UI 可讓您查看作業執行,包括進行中的執行。 請參閱 Databricks 作業的監視和可觀察性。
您會在作業或工作啟動、完成或失敗時收到通知。 您可將通知傳送至一或多個電子郵件地址或系統目的地。 請參閱新增工作事件的電子郵件和系統通知。
系統資料表包含 lakeflow
結構描述,您可以在其中檢視帳戶中與作業活動相關的記錄。 請參閱工作系統資料表參考。
您也可以將作業系統資料表與計費資料表聯結,以監視帳戶中作業的成本。 請參閱 使用系統數據表監視作業成本 & 效能。
限制
存在下列限制:
- 工作區受限於 2000 個並行作業執行。
429 Too Many Requests
回應會在您要求無法立即啟動的執行時傳回。 - 工作區在一小時內可以建立的作業數目限制為 10000 (包括「執行提交」)。 這項限制也會影響 REST API 和筆記本工作流程所建立的作業。
- 工作區最多可包含 12000 個儲存的作業。
- 作業最多可以包含 100 個工作。
我能否以程序設計方式管理工作流程?
Databricks 有工具和 API,讓您能以程序設計方式排程及協調工作流程,包括下列各項:
- Databricks CLI
- Databricks Asset Bundles
- 適用於 Visual Studio Code 的 Databricks 延伸模組
- Databricks SDK
- Jobs REST API
如需開發人員工具的詳細資訊,請參閱 開發人員工具。
使用 Apache AirFlow 的工作流程協調流程
您可以使用 Apache Airflow 來管理及排程資料工作流程。 使用 Airflow 時,您可在 Python 檔案中定義工作流程,而 Airflow 會管理排程和執行工作流程。 請參閱使用 Apache Airflow 協調 Azure Databricks 作業。
與 Azure Data Factory 的工作流程協調
Azure Data Factory (ADF) 是雲端資料整合服務,將資料儲存、移動及處理服務組合成自動化資料管線。 您可以使用 ADF 來協調 Azure Databricks 作業,作為 ADF 管線的一部分。
ADF 也有內建支援,可在 ADF 管線中執行 Databricks 筆記本、Python 指令碼或包裝在 JAR 中的程式碼。
若要了解如何在 ADF 管線中執行 Databricks 筆記本,請參閱在 Azure Data Factory 中使用 Databricks 筆記本活動執行 Databricks 筆記本,然後執行 Databricks 筆記本來轉換資料。
若要了解如何在 ADF 管線中執行 Python 指令碼,請參閱在 Azure Databricks 中執行 Python 活動來轉換資料。
若要了解如何在 ADF 管線中執行在 JAR 中封裝的程式碼,請參閱在 Azure Databricks 中執行 JAR 活動來轉換資料。