從作業 API 2.0 更新至 2.1
您現在可以使用 Azure Databricks 作業協調多個工作 。 本文詳細說明支援具有多個工作之作業的 作業 API 變更,並提供指引,協助您更新現有的 API 用戶端以使用這項新功能。
Databricks 會針對 API 腳本和用戶端建議作業 API 2.1,特別是在搭配多個工作使用作業時。
本文將單一工作 定義為單一工作格式 的作業,以及以多個 工作定義為多工格式 的工作。
作業 API 2.0 和 2.1 現在支援 更新 要求。 update
使用要求來變更現有的作業, 而不是重設 要求,將單一工作格式作業與多工作格式作業之間的變更降到最低。
API 變更
作業 API 現在會 TaskSettings
定義 物件,以擷取作業中每個工作的設定。 針對多工格式作業, tasks
欄位是資料結構的陣列 TaskSettings
,會包含在 物件中 JobSettings
。 先前部分的 JobSettings
一些欄位現在是多工格式作業之工作設定的一部分。 JobSettings
也會更新為包含 format
欄位。 欄位 format
會指出作業的格式,而且 是 STRING
設定為 SINGLE_TASK
或 MULTI_TASK
的值。
您必須更新現有的 API 用戶端,才能將這些變更更新為 Job設定多重工作格式作業。 如需必要變更的詳細資訊,請參閱 API 用戶端指南 。
作業 API 2.1 支援多重工作格式。 所有 API 2.1 要求都必須符合多重工作格式,且回應的結構為多重工作格式。 新功能會先針對 API 2.1 發行。
作業 API 2.0 會以額外的欄位更新,以支援多重工作格式作業。 除非有說明,本檔中的範例會使用 API 2.0。 不過,Databricks 建議針對新的和現有的 API 腳本和用戶端使用 API 2.1。
JSON 檔範例,表示 API 2.0 和 2.1 的多工作格式作業:
{
"job_id": 53,
"settings": {
"name": "A job with multiple tasks",
"email_notifications": {},
"timeout_seconds": 0,
"max_concurrent_runs": 1,
"tasks": [
{
"task_key": "clean_data",
"description": "Clean and prepare the data",
"notebook_task": {
"notebook_path": "/Users/user@databricks.com/clean-data"
},
"existing_cluster_id": "1201-my-cluster",
"max_retries": 3,
"min_retry_interval_millis": 0,
"retry_on_timeout": true,
"timeout_seconds": 3600,
"email_notifications": {}
},
{
"task_key": "analyze_data",
"description": "Perform an analysis of the data",
"notebook_task": {
"notebook_path": "/Users/user@databricks.com/analyze-data"
},
"depends_on": [
{
"task_key": "clean_data"
}
],
"existing_cluster_id": "1201-my-cluster",
"max_retries": 3,
"min_retry_interval_millis": 0,
"retry_on_timeout": true,
"timeout_seconds": 3600,
"email_notifications": {}
}
],
"format": "MULTI_TASK"
},
"created_time": 1625841911296,
"creator_user_name": "user@databricks.com",
"run_as_user_name": "user@databricks.com"
}
作業 API 2.1 支援設定工作層級叢集或一或多個共用作業叢集:
- 工作層級叢集會在工作完成時建立並啟動。
- 共用作業叢集可讓相同作業中的多個工作使用叢集。 使用叢集的第一個工作在叢集完成最後一項工作之後開始和終止時,就會建立叢集並啟動叢集。 共用作業叢集不會在閒置時終止,而是只有在使用它的所有工作完成之後才會終止。 共用叢集的多個非相依工作可以同時啟動。 如果共用作業叢集在完成所有工作之前失敗或終止,則會建立新的叢集。
若要設定共用作業叢集, JobCluster
請在 物件中包含 JobSettings
陣列。 您可以為每個作業指定最多 100 個叢集。 以下是使用兩個共用叢集設定之作業的 API 2.1 回應範例:
注意
如果工作具有程式庫相依性,您必須在欄位設定中 task
設定程式庫;無法在共用作業叢集組態中設定程式庫。 在下列範例中, libraries
工作組態 ingest_orders
中的 欄位示範程式庫相依性規格。
{
"job_id": 53,
"settings": {
"name": "A job with multiple tasks",
"email_notifications": {},
"timeout_seconds": 0,
"max_concurrent_runs": 1,
"job_clusters": [
{
"job_cluster_key": "default_cluster",
"new_cluster": {
"spark_version": "7.3.x-scala2.12",
"node_type_id": "i3.xlarge",
"spark_conf": {
"spark.speculation": true
},
"aws_attributes": {
"availability": "SPOT",
"zone_id": "us-west-2a"
},
"autoscale": {
"min_workers": 2,
"max_workers": 8
}
}
},
{
"job_cluster_key": "data_processing_cluster",
"new_cluster": {
"spark_version": "7.3.x-scala2.12",
"node_type_id": "r4.2xlarge",
"spark_conf": {
"spark.speculation": true
},
"aws_attributes": {
"availability": "SPOT",
"zone_id": "us-west-2a"
},
"autoscale": {
"min_workers": 8,
"max_workers": 16
}
}
}
],
"tasks": [
{
"task_key": "ingest_orders",
"description": "Ingest order data",
"depends_on": [ ],
"job_cluster_key": "auto_scaling_cluster",
"spark_jar_task": {
"main_class_name": "com.databricks.OrdersIngest",
"parameters": [
"--data",
"dbfs:/path/to/order-data.json"
]
},
"libraries": [
{
"jar": "dbfs:/mnt/databricks/OrderIngest.jar"
}
],
"timeout_seconds": 86400,
"max_retries": 3,
"min_retry_interval_millis": 2000,
"retry_on_timeout": false
},
{
"task_key": "clean_orders",
"description": "Clean and prepare the order data",
"notebook_task": {
"notebook_path": "/Users/user@databricks.com/clean-data"
},
"job_cluster_key": "default_cluster",
"max_retries": 3,
"min_retry_interval_millis": 0,
"retry_on_timeout": true,
"timeout_seconds": 3600,
"email_notifications": {}
},
{
"task_key": "analyze_orders",
"description": "Perform an analysis of the order data",
"notebook_task": {
"notebook_path": "/Users/user@databricks.com/analyze-data"
},
"depends_on": [
{
"task_key": "clean_data"
}
],
"job_cluster_key": "data_processing_cluster",
"max_retries": 3,
"min_retry_interval_millis": 0,
"retry_on_timeout": true,
"timeout_seconds": 3600,
"email_notifications": {}
}
],
"format": "MULTI_TASK"
},
"created_time": 1625841911296,
"creator_user_name": "user@databricks.com",
"run_as_user_name": "user@databricks.com"
}
對於單一工作格式作業,除了 JobSettings
新增 format
欄位之外,資料結構會維持不變。 未 TaskSettings
包含陣列,且工作設定仍會定義于資料結構的最上層 JobSettings
。 您不需要變更現有的 API 用戶端,即可處理單一工作格式作業。
JSON 檔範例,代表 API 2.0 的單一工作格式作業:
{
"job_id": 27,
"settings": {
"name": "Example notebook",
"existing_cluster_id": "1201-my-cluster",
"libraries": [
{
"jar": "dbfs:/FileStore/jars/spark_examples.jar"
}
],
"email_notifications": {},
"timeout_seconds": 0,
"schedule": {
"quartz_cron_expression": "0 0 0 * * ?",
"timezone_id": "US/Pacific",
"pause_status": "UNPAUSED"
},
"notebook_task": {
"notebook_path": "/notebooks/example-notebook",
"revision_timestamp": 0
},
"max_concurrent_runs": 1,
"format": "SINGLE_TASK"
},
"created_time": 1504128821443,
"creator_user_name": "user@databricks.com"
}
API 用戶端指南
本節提供受新多重工作格式功能影響之 API 呼叫的指導方針、範例和必要變更。
本節內容:
創建
若要透過 在作業 API 中建立新的作業 作業 ( POST /jobs/create
) 建立單一工作格式作業,您不需要變更現有的用戶端。
若要建立多工格式作業,請使用 tasks
中的 JobSettings
欄位來指定每個工作的設定。 下列範例會建立具有兩個筆記本工作的作業。 此範例適用于 API 2.0 和 2.1:
注意
每個作業最多可以指定 100 個工作。
{
"name": "Multi-task-job",
"max_concurrent_runs": 1,
"tasks": [
{
"task_key": "clean_data",
"description": "Clean and prepare the data",
"notebook_task": {
"notebook_path": "/Users/user@databricks.com/clean-data"
},
"existing_cluster_id": "1201-my-cluster",
"timeout_seconds": 3600,
"max_retries": 3,
"retry_on_timeout": true
},
{
"task_key": "analyze_data",
"description": "Perform an analysis of the data",
"notebook_task": {
"notebook_path": "/Users/user@databricks.com/analyze-data"
},
"depends_on": [
{
"task_key": "clean_data"
}
],
"existing_cluster_id": "1201-my-cluster",
"timeout_seconds": 3600,
"max_retries": 3,
"retry_on_timeout": true
}
]
}
執行提交
若要在作業 API 中提交單一工作格式作業 的一次性執行,並觸發一次性執行 作業 ( POST /runs/submit
), 您不需要變更現有的用戶端。
若要提交多工格式作業的一次性執行,請使用 tasks
中的 JobSettings
欄位來指定每個工作的設定,包括叢集。 提交多工格式作業時,必須在工作層級設定叢集,因為 runs submit
要求不支援共用作業叢集。 如需指定多個工作的範例 JobSettings
,請參閱 建立 。
更新
若要使用 [作業 API] 中的 [部分更新作業 ] POST /jobs/update
來更新單一工作格式作業,您不需要變更現有的用戶端。
若要更新多工格式作業的設定,您必須使用唯 task_key
一欄位來識別新的 task
設定。 如需指定多個工作的範例 JobSettings
,請參閱 建立 。
重 置
若要使用覆寫作業 API 中作業 的所有 POST /jobs/reset
設定來覆寫單一工作格式作業 的設定,您不需要變更現有的用戶端。
若要覆寫多重工作格式作業的設定,請使用資料結構的陣列 TaskSettings
來指定 JobSettings
資料結構。 如需指定多個工作的範例 JobSettings
,請參閱 建立 。
使用 Update 來變更個別欄位,而不需從單一工作切換到多工格式。
清單
對於單一工作格式作業,不需要任何用戶端變更,即可處理來自 作業 API 中列出所有作業 作業 ( GET /jobs/list
) 的回應。
對於多工格式作業,大部分的設定都是在工作層級定義,而不是工作層級。 叢集組態可以在工作或作業層級設定。 若要修改用戶端以存取結構中傳回之多重工作格式作業的 Job
叢集或工作設定:
- 剖析
job_id
多工格式作業的欄位。 job_id
將 傳遞至 作業 API 中的取得作業 作業 (GET /jobs/get
) 以擷取作業詳細資料。 如需多重工作格式作業之 API 呼叫的Get
範例回應,請參閱 取得 。
下列範例顯示包含單一工作和多重工作格式作業的回應。 此範例適用于 API 2.0:
{
"jobs": [
{
"job_id": 36,
"settings": {
"name": "A job with a single task",
"existing_cluster_id": "1201-my-cluster",
"email_notifications": {},
"timeout_seconds": 0,
"notebook_task": {
"notebook_path": "/Users/user@databricks.com/example-notebook",
"revision_timestamp": 0
},
"max_concurrent_runs": 1,
"format": "SINGLE_TASK"
},
"created_time": 1505427148390,
"creator_user_name": "user@databricks.com"
},
{
"job_id": 53,
"settings": {
"name": "A job with multiple tasks",
"email_notifications": {},
"timeout_seconds": 0,
"max_concurrent_runs": 1,
"format": "MULTI_TASK"
},
"created_time": 1625841911296,
"creator_user_name": "user@databricks.com"
}
]
}
獲取
對於單一工作格式作業,不需要任何用戶端變更,即可處理從 作業 API 中取得作業 作業 ( GET /jobs/get
) 的回應。
多工格式工作會傳回包含工作設定的資料結構陣列 task
。 如果您需要存取工作層級詳細資料,您必須修改用戶端以逐一查看 tasks
陣列並擷取所需的欄位。
下列顯示來自 API 呼叫多重工作格式作業的 Get
範例回應。 此範例適用于 API 2.0 和 2.1:
{
"job_id": 53,
"settings": {
"name": "A job with multiple tasks",
"email_notifications": {},
"timeout_seconds": 0,
"max_concurrent_runs": 1,
"tasks": [
{
"task_key": "clean_data",
"description": "Clean and prepare the data",
"notebook_task": {
"notebook_path": "/Users/user@databricks.com/clean-data"
},
"existing_cluster_id": "1201-my-cluster",
"max_retries": 3,
"min_retry_interval_millis": 0,
"retry_on_timeout": true,
"timeout_seconds": 3600,
"email_notifications": {}
},
{
"task_key": "analyze_data",
"description": "Perform an analysis of the data",
"notebook_task": {
"notebook_path": "/Users/user@databricks.com/analyze-data"
},
"depends_on": [
{
"task_key": "clean_data"
}
],
"existing_cluster_id": "1201-my-cluster",
"max_retries": 3,
"min_retry_interval_millis": 0,
"retry_on_timeout": true,
"timeout_seconds": 3600,
"email_notifications": {}
}
],
"format": "MULTI_TASK"
},
"created_time": 1625841911296,
"creator_user_name": "user@databricks.com",
"run_as_user_name": "user@databricks.com"
}
執行取得
對於單一工作格式作業,不需要任何用戶端變更,即可處理從 作業 API 中取得作業執行 作業 ( GET /jobs/runs/get
) 的回應。
多重工作格式作業執行的回應包含 的 TaskSettings
陣列。 若要擷取每個工作的執行結果:
- 逐一查看每個工作。
- 剖析
run_id
每個工作的 。 - 使用 呼叫 取得執行 作業的輸出 (
GET /jobs/runs/get-output
),run_id
以取得每個工作執行的詳細資料。 以下是來自此要求的範例回應:
{
"job_id": 53,
"run_id": 759600,
"number_in_job": 7,
"original_attempt_run_id": 759600,
"state": {
"life_cycle_state": "TERMINATED",
"result_state": "SUCCESS",
"state_message": ""
},
"cluster_spec": {},
"start_time": 1595943854860,
"setup_duration": 0,
"execution_duration": 0,
"cleanup_duration": 0,
"trigger": "ONE_TIME",
"creator_user_name": "user@databricks.com",
"run_name": "Query logs",
"run_type": "JOB_RUN",
"tasks": [
{
"run_id": 759601,
"task_key": "query-logs",
"description": "Query session logs",
"notebook_task": {
"notebook_path": "/Users/user@databricks.com/log-query"
},
"existing_cluster_id": "1201-my-cluster",
"state": {
"life_cycle_state": "TERMINATED",
"result_state": "SUCCESS",
"state_message": ""
}
},
{
"run_id": 759602,
"task_key": "validate_output",
"description": "Validate query output",
"depends_on": [
{
"task_key": "query-logs"
}
],
"notebook_task": {
"notebook_path": "/Users/user@databricks.com/validate-query-results"
},
"existing_cluster_id": "1201-my-cluster",
"state": {
"life_cycle_state": "TERMINATED",
"result_state": "SUCCESS",
"state_message": ""
}
}
],
"format": "MULTI_TASK"
}
執行取得輸出
對於單一工作格式作業,不需要任何用戶端變更,即可處理從 作業 API 中取得執行 作業 ( GET /jobs/runs/get-output
) 輸出的回應。
針對多工格式作業,呼叫 Runs get output
父執行會導致錯誤,因為執行輸出僅適用于個別工作。 若要取得多重工作格式作業的輸出和中繼資料:
- 呼叫取得執行 要求的輸出。
- 逐一查看回應中的子
run_id
欄位。 - 使用子
run_id
值來呼叫Runs get output
。
執行清單
對於單一工作格式作業,不需要任何用戶端變更,即可處理從 List 執行作業 的回應 ( GET /jobs/runs/list
)。
針對多工格式作業,會傳回空 tasks
陣列。 run_id
將 傳遞至 取得作業執行 作業 ( GET /jobs/runs/get
) 以擷取工作。 以下顯示來自 API 呼叫多重工作格式作業的 Runs list
範例回應:
{
"runs": [
{
"job_id": 53,
"run_id": 759600,
"number_in_job": 7,
"original_attempt_run_id": 759600,
"state": {
"life_cycle_state": "TERMINATED",
"result_state": "SUCCESS",
"state_message": ""
},
"cluster_spec": {},
"start_time": 1595943854860,
"setup_duration": 0,
"execution_duration": 0,
"cleanup_duration": 0,
"trigger": "ONE_TIME",
"creator_user_name": "user@databricks.com",
"run_name": "Query logs",
"run_type": "JOB_RUN",
"tasks": [],
"format": "MULTI_TASK"
}
],
"has_more": false
}