Aktualizace z rozhraní API pro úlohy 2.0 na verzi 2.1
Teď můžete orchestrovat více úloh pomocí úloh Azure Databricks. Tento článek podrobně popisuje změny rozhraní API úloh, které podporují úlohy s více úlohami, a poskytuje pokyny, které vám pomůžou aktualizovat stávající klienty rozhraní API tak, aby fungovaly s touto novou funkcí.
Databricks doporučuje rozhraní API úloh 2.1 pro vaše skripty a klienty rozhraní API, zejména při použití úloh s více úlohami.
Tento článek se týká úloh definovaných s jedním úkolem jako formát jednoho úkolu a úloh definovaných s více úkoly ve formátu více úkolů.
Rozhraní API úloh 2.0 a 2.1 teď podporuje žádost o aktualizaci . update
Pomocí požadavku můžete místo žádosti o resetování změnit existující úlohu, abyste minimalizovali změny mezi úlohami formátu s jedním úkolem a úlohami ve formátu s více úlohami.
Změny rozhraní API
Rozhraní API úloh teď definuje TaskSettings
objekt, který bude zaznamenávat nastavení pro každý úkol v úloze. V případě úloh tasks
s více úlohami formátu je pole pole datových TaskSettings
struktur součástí objektu JobSettings
. Některá pole, která JobSettings
byla dříve součástí, jsou teď součástí nastavení úkolů pro úlohy ve formátu s více úkoly. JobSettings
aktualizuje se také tak, aby zahrnovalo format
pole. Pole format
označuje formát úlohy a je hodnota nastavená STRING
na SINGLE_TASK
hodnotu nebo MULTI_TASK
.
Pro tyto změny jobSettings je potřeba aktualizovat stávající klienty rozhraní API pro úlohy ve formátu s více úlohami. Další informace o požadovaných změnách najdete v průvodci klientem rozhraní API.
Rozhraní API úloh 2.1 podporuje formát s více úlohami. Všechny požadavky rozhraní API 2.1 musí odpovídat formátu více úloh a odpovědi jsou strukturované ve formátu s více úlohami. Nové funkce jsou vydány pro rozhraní API 2.1 jako první.
Rozhraní API úloh 2.0 se aktualizuje o další pole pro podporu úloh ve formátu více úloh. Pokud není uvedeno, příklady v tomto dokumentu používají rozhraní API 2.0. Databricks však doporučuje rozhraní API 2.1 pro nové a existující skripty a klienty rozhraní API.
Ukázkový dokument JSON představující úlohu ve formátu s více úlohami pro rozhraní API 2.0 a 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"
}
Rozhraní API úloh 2.1 podporuje konfiguraci clusterů na úrovni úloh nebo jednoho nebo více clusterů sdílených úloh:
- Cluster na úrovni úloh se vytvoří a spustí při spuštění a ukončení úkolu po dokončení úkolu.
- Cluster sdílených úloh umožňuje použití clusteru více úloh ve stejné úloze. Cluster se vytvoří a spustí při prvním spuštění úlohy, která cluster spustí a ukončí po dokončení poslední úlohy pomocí clusteru. Cluster sdílených úloh není ukončen při nečinnosti, ale ukončí se až po dokončení všech úkolů, které ho používají. Několik nespoléhajných úloh, které sdílejí cluster, se může spustit současně. Pokud cluster sdílených úloh selže nebo je ukončen před dokončením všech úkolů, vytvoří se nový cluster.
Pokud chcete nakonfigurovat clustery sdílených úloh, zahrňte JobCluster
do objektu JobSettings
pole. Pro úlohu můžete zadat maximálně 100 clusterů. Následuje příklad odpovědi rozhraní API 2.1 pro úlohu nakonfigurovanou se dvěma sdílenými clustery:
Poznámka:
Pokud má úloha závislosti knihovny, musíte nakonfigurovat knihovny v task
nastavení polí. Knihovny nelze konfigurovat v konfiguraci clusteru sdílených úloh. V následujícím příkladu libraries
pole v konfiguraci ingest_orders
úlohy ukazuje specifikaci závislosti knihovny.
{
"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"
}
U úloh JobSettings
formátu s jedním úkolem zůstává datová struktura beze změny s výjimkou přidání format
pole. Není zahrnuto žádné TaskSettings
pole a nastavení úkolů zůstává definováno na nejvyšší úrovni JobSettings
datové struktury. Abyste mohli zpracovávat úlohy formátu s jedním úkolem, nebudete muset stávající klienti rozhraní API provádět změny.
Ukázkový dokument JSON představující úlohu formátu s jedním úkolem pro rozhraní 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"
}
Průvodce klientem rozhraní API
Tato část obsahuje pokyny, příklady a požadované změny pro volání rozhraní API ovlivněná novou funkcí formátu s více úlohami.
V této části:
- Vytvořit
- Spuštění odesílané
- Aktualizace
- Vymazat
- Seznam
- Získat
- Získání spuštění
- Spuštění – získání výstupu
- Seznam spuštění
Vytvářet
Pokud chcete vytvořit úlohu formátu s jedním úkolem prostřednictvím operace Vytvořit novou úlohu (POST /jobs/create
) v rozhraní API úloh, nemusíte měnit stávající klienty.
Pokud chcete vytvořit úlohu ve formátu více úkolů, zadejte nastavení pro každý úkol pomocí tasks
pole JobSettings
. Následující příklad vytvoří úlohu se dvěma úkoly poznámkového bloku. Tento příklad je určený pro rozhraní API 2.0 a 2.1:
Poznámka:
Pro každou úlohu je možné zadat maximálně 100 úkolů.
{
"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
}
]
}
Spuštění odesílané
Pokud chcete odeslat jednorázově spuštěnou úlohu s jedním úkolem s úlohou Vytvořit a aktivovat jednorázovou operaci běhu (POST /runs/submit
) v rozhraní API úloh, nemusíte měnit stávající klienty.
Pokud chcete odeslat jednorázový běh úlohy s více úlohami ve formátu úloh, použijte tasks
pole JobSettings
k určení nastavení pro každou úlohu, včetně clusterů. Clustery musí být nastaveny na úrovni úlohy při odesílání úlohy ve formátu více úloh, protože runs submit
požadavek nepodporuje clustery sdílených úloh. Viz Vytvoření příkladu JobSettings
určující více úkolů.
Aktualizace
Pokud chcete aktualizovat úlohu s jedním úkolem pomocí operace částečně aktualizovat úlohu (POST /jobs/update
) v rozhraní API úloh, nemusíte měnit stávající klienty.
Chcete-li aktualizovat nastavení úlohy s více úkoly ve formátu, musíte použít jedinečné task_key
pole k identifikaci nových task
nastavení. Viz Vytvoření příkladu JobSettings
určující více úkolů.
Resetovat
Pokud chcete přepsat nastavení úlohy s jedním úkolem pomocí přepsání všech nastavení operace úlohy (POST /jobs/reset
) v rozhraní API úloh, nemusíte měnit stávající klienty.
Chcete-li přepsat nastavení úlohy formátu s více úlohami úkolů, zadejte datovou JobSettings
strukturu s polem datových TaskSettings
struktur. Viz Vytvoření příkladu JobSettings
určující více úkolů.
Pomocí možnosti Aktualizovat můžete změnit jednotlivá pole bez přechodu z jednoho úkolu na formát více úkolů.
Seznam
U úloh ve formátu jednoho úkolu nejsou k zpracování odpovědi ze seznamu všech úlohGET /jobs/list
v rozhraní API úloh vyžadovány žádné změny klienta.
U úloh ve formátu s více úlohami se většina nastavení definuje na úrovni úkolu, nikoli na úrovni úlohy. Konfigurace clusteru může být nastavena na úrovni úlohy nebo úlohy. Úprava klientů pro přístup k nastavení clusteru nebo úlohy pro úlohu ve více úlohách vrácených ve struktuře Job
:
- Parsujte
job_id
pole pro úlohu ve formátu s více úkoly. job_id
Předejte operaci Získání úlohy (GET /jobs/get
) v rozhraní API úloh a načtěte podrobnosti úlohy. Viz Získání ukázkové odpovědi zGet
volání rozhraní API pro úlohu s více úlohami formátu.
Následující příklad ukazuje odpověď obsahující úlohy s jedním úkolem a více úlohami formátu. Tento příklad je určený pro rozhraní 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"
}
]
}
Dostat
U úloh ve formátu jednoho úkolu nejsou k zpracování odpovědi z operace Získání úlohy (GET /jobs/get
) v rozhraní API úloh vyžadovány žádné změny klienta.
Úlohy formátu s více úlohami vrátí pole datových task
struktur obsahujících nastavení úkolů. Pokud potřebujete přístup k podrobnostem na úrovni úlohy, musíte upravit klienty tak, aby iterovat pole tasks
a extrahovali požadovaná pole.
Následující příklad ukazuje odpověď z Get
volání rozhraní API pro úlohu s více úlohami formátu. Tento příklad je určený pro rozhraní API 2.0 a 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"
}
Získání spuštění
U úloh ve formátu jednoho úkolu nejsou k zpracování odpovědi z operace Get a job run (GET /jobs/runs/get
) v rozhraní API úloh vyžadovány žádné změny klienta.
Odpověď pro spuštění úlohy s více úlohami ve formátu obsahuje pole TaskSettings
. Načtení výsledků spuštění pro jednotlivé úlohy:
- Iterujte jednotlivé úkoly.
- Parsujte
run_id
pro každý úkol. - Zavolejte get the output for a run operation (
GET /jobs/runs/get-output
) with therun_id
get details on the run run for each task. Následuje příklad odpovědi z tohoto požadavku:
{
"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"
}
Spuštění – získání výstupu
U úloh ve formátu jednoho úkolu nejsou k zpracování odpovědi z výstupu operace spuštění (GET /jobs/runs/get-output
) v rozhraní API úloh vyžadovány žádné změny klienta.
U úloh ve formátu více úloh má volání Runs get output
nadřazeného spuštění za následek chybu, protože výstup spuštění je k dispozici pouze pro jednotlivé úlohy. Získání výstupu a metadat pro úlohu ve formátu s více úlohami:
- Volání výstupu get for a run request.
- Iterujte podřízená
run_id
pole v odpovědi. - K volání
Runs get output
použijte podřízenérun_id
hodnoty .
Seznam spuštění
U úloh ve formátu jednoho úkolu nejsou k zpracování odpovědi ze seznamu pro operaci úlohy (GET /jobs/runs/list
) potřeba žádné změny klienta.
U úloh ve formátu více úloh se vrátí prázdné tasks
pole. run_id
Předejte operaci get a job run (GET /jobs/runs/get
) to retrieve the tasks. Následující příklad odpovědi z Runs list
volání rozhraní API pro úlohu ve formátu s více úlohami:
{
"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
}