Aggiornamento dall'API processi da 2.0 a 2.1
È ora possibile orchestrare più attività con i processi di Azure Databricks. Questo articolo illustra in dettaglio le modifiche apportate all'API Processi che supportano i processi con più attività e fornisce indicazioni utili per aggiornare i client API esistenti per usare questa nuova funzionalità.
Databricks consiglia l'API Processi 2.1 per gli script e i client API, in particolare quando si usano processi con più attività.
Questo articolo si riferisce ai processi definiti con una singola attività come formato a singola attività e processi definiti con più attività come formato multi-attività.
L'API dei processi 2.0 e 2.1 supporta ora la richiesta di aggiornamento . Usare la update
richiesta per modificare un processo esistente anziché la richiesta di reimpostazione per ridurre al minimo le modifiche tra processi in formato attività singola e processi in formato multi-attività.
Modifiche API
L'API Processi definisce ora un TaskSettings
oggetto per acquisire le impostazioni per ogni attività in un processo. Per i processi in formato multi-attività, il tasks
campo , una matrice di strutture di TaskSettings
dati, è incluso nell'oggetto JobSettings
. Alcuni campi in precedenza fanno parte delle impostazioni delle JobSettings
attività per i processi in formato multi-attività. JobSettings
viene aggiornato anche per includere il format
campo . Il format
campo indica il formato del processo e è un STRING
valore impostato su SINGLE_TASK
o MULTI_TASK
.
È necessario aggiornare i client API esistenti per queste modifiche a Job Impostazioni per i processi in formato multi-attività. Per altre informazioni sulle modifiche necessarie, vedere la guida client api.
L'API Processi 2.1 supporta il formato multi-attività. Tutte le richieste API 2.1 devono essere conformi al formato multi-attività e le risposte sono strutturate nel formato multi-attività. Le nuove funzionalità vengono rilasciate per l'API 2.1.
L'API Processi 2.0 viene aggiornata con un campo aggiuntivo per supportare processi in formato multi-attività. Tranne dove indicato, gli esempi in questo documento usano l'API 2.0. Databricks consiglia tuttavia l'API 2.1 per gli script e i client API nuovi ed esistenti.
Documento JSON di esempio che rappresenta un processo in formato multi-attività per l'API 2.0 e 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"
}
L'API processi 2.1 supporta la configurazione di cluster a livello di attività o di uno o più cluster di processi condivisi:
- Un cluster a livello di attività viene creato e avviato all'avvio di un'attività e termina al termine dell'attività.
- Un cluster di processi condivisi consente a più attività nello stesso processo di usare il cluster. Il cluster viene creato e avviato all'avvio della prima attività che usa il cluster e termina dopo il completamento dell'ultima attività usando il cluster. Un cluster di processi condivisi non viene terminato quando è inattiva, ma termina solo dopo il completamento di tutte le attività che lo usano. Più attività non dipendenti che condividono un cluster possono essere avviate contemporaneamente. Se un cluster di processi condivisi ha esito negativo o viene terminato prima del completamento di tutte le attività, viene creato un nuovo cluster.
Per configurare i cluster di processi condivisi, includere una JobCluster
matrice nell'oggetto JobSettings
. È possibile specificare un massimo di 100 cluster per processo. Di seguito è riportato un esempio di risposta API 2.1 per un processo configurato con due cluster condivisi:
Nota
Se un'attività presenta dipendenze di libreria, è necessario configurare le librerie nelle impostazioni dei task
campi. Le librerie non possono essere configurate in una configurazione del cluster di processi condivisi. Nell'esempio seguente il libraries
campo nella configurazione dell'attività ingest_orders
illustra la specifica di una dipendenza di libreria.
{
"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"
}
Per i processi in formato attività singola, la JobSettings
struttura dei dati rimane invariata, ad eccezione dell'aggiunta del format
campo. Non è inclusa alcuna TaskSettings
matrice e le impostazioni dell'attività rimangono definite al livello superiore della struttura dei JobSettings
dati. Non sarà necessario apportare modifiche ai client API esistenti per elaborare processi in formato singola attività.
Documento JSON di esempio che rappresenta un processo di formato a singola attività per l'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"
}
Guida client API
Questa sezione fornisce linee guida, esempi e modifiche necessarie per le chiamate API interessate dalla nuova funzionalità di formato multi-attività.
Contenuto della sezione:
- Crea
- Esecuzioni di invio
- Aggiornamento
- Reimposta
- Elenco
- GET
- Esecuzione get
- Le esecuzioni ottengono l'output
- Elenco esecuzioni
Creare
Per creare un processo in formato singola attività tramite l'operazione Crea un nuovo processo (POST /jobs/create
) nell'API Processi, non è necessario modificare i client esistenti.
Per creare un processo in formato multi-attività, usare il tasks
campo in JobSettings
per specificare le impostazioni per ogni attività. Nell'esempio seguente viene creato un processo con due attività del notebook. Questo esempio è relativo all'API 2.0 e alla versione 2.1:
Nota
È possibile specificare un massimo di 100 attività per ogni processo.
{
"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
}
]
}
Esecuzioni di invio
Per inviare un'unica esecuzione di un processo in formato singola attività con l'opzione Crea e attivare un'operazione di esecuzione una tantum (POST /runs/submit
) nell'API Processi, non è necessario modificare i client esistenti.
Per inviare una sola esecuzione di un processo in formato multiattività, usare il tasks
campo in JobSettings
per specificare le impostazioni per ogni attività, inclusi i cluster. I cluster devono essere impostati a livello di attività quando si invia un processo in formato multi-attività perché la runs submit
richiesta non supporta i cluster di processi condivisi. Vedere Creare per un esempio JobSettings
che specifica più attività.
Aggiornamento
Per aggiornare un processo in formato singola attività con l'operazione Parzialmente aggiornare un processo (POST /jobs/update
) nell'API Processi, non è necessario modificare i client esistenti.
Per aggiornare le impostazioni di un processo in formato multi-attività, è necessario usare il campo univoco task_key
per identificare le nuove task
impostazioni. Vedere Creare per un esempio JobSettings
che specifica più attività.
Reimpostare
Per sovrascrivere le impostazioni di un processo in formato singola attività con sovrascrivi tutte le impostazioni per un'operazione di processo (POST /jobs/reset
) nell'API Processi, non è necessario modificare i client esistenti.
Per sovrascrivere le impostazioni di un processo in formato multi-attività, specificare una JobSettings
struttura di dati con una matrice di strutture di TaskSettings
dati. Vedere Creare per un esempio JobSettings
che specifica più attività.
Usare Aggiorna per modificare i singoli campi senza passare dal formato a singola attività a quello multi-attività.
Elenco
Per i processi in formato attività singola, non sono necessarie modifiche client per elaborare la risposta dall'operazione Elenca tutti i processi (GET /jobs/list
) nell'API Processi.
Per i processi in formato multi-attività, la maggior parte delle impostazioni è definita a livello di attività e non a livello di processo. La configurazione del cluster può essere impostata a livello di attività o processo. Per modificare i client per accedere alle impostazioni del cluster o delle attività per un processo in formato multi-attività restituito nella Job
struttura:
- Analizzare il
job_id
campo per il processo in formato multi-attività. - Passare all'operazione
job_id
Ottenere un processo (GET /jobs/get
) nell'API Processi per recuperare i dettagli del processo. Vedere Ottenere una risposta di esempio dallaGet
chiamata API per un processo in formato multi-attività.
L'esempio seguente mostra una risposta contenente processi in formato attività singola e multi-attività. Questo esempio è per l'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"
}
]
}
Ottieni
Per i processi in formato a singola attività, non sono necessarie modifiche client per elaborare la risposta dall'operazione Recupera un processo (GET /jobs/get
) nell'API Processi.
I processi in formato multi-attività restituiscono una matrice di strutture di dati contenenti le impostazioni delle task
attività. Se è necessario accedere ai dettagli a livello di attività, è necessario modificare i client per scorrere la tasks
matrice ed estrarre i campi obbligatori.
Di seguito viene illustrata una risposta di esempio dalla Get
chiamata API per un processo in formato multi-attività. Questo esempio è relativo all'API 2.0 e alla versione 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"
}
Esecuzione get
Per i processi in formato attività singola, non sono necessarie modifiche client per elaborare la risposta dall'operazione Get a job run (GET /jobs/runs/get
) nell'API Processi.
La risposta per l'esecuzione di un processo in formato multi-attività contiene una matrice di TaskSettings
. Per recuperare i risultati dell'esecuzione per ogni attività:
- Scorrere ognuna delle attività.
- Analizzare per
run_id
ogni attività. - Chiamare get the output for a run operation (
GET /jobs/runs/get-output
) conrun_id
per ottenere i dettagli sull'esecuzione per ogni attività. Di seguito è riportata una risposta di esempio da questa richiesta:
{
"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"
}
Le esecuzioni ottengono l'output
Per i processi in formato a singola attività, non sono necessarie modifiche client per elaborare la risposta dall'oggetto Ottenere l'output per un'operazione di esecuzione (GET /jobs/runs/get-output
) nell'API Processi.
Per i processi in formato multi-attività, la chiamata Runs get output
a un'esecuzione padre genera un errore perché l'output di esecuzione è disponibile solo per le singole attività. Per ottenere l'output e i metadati per un processo in formato multi-attività:
- Chiamare get the output for a run request .Call the Get the output for a run request.
- Scorrere i campi figlio
run_id
nella risposta. - Usare i valori figlio
run_id
per chiamareRuns get output
.
Elenco esecuzioni
Per i processi in formato singola attività, non sono necessarie modifiche client per elaborare la risposta dall'elenco di esecuzioni per un'operazione di processo (GET /jobs/runs/list
).
Per i processi in formato multi-attività, viene restituita una matrice vuota tasks
. Passare all'operazione run_id
Get a job run (GET /jobs/runs/get
) per recuperare le attività. Di seguito viene illustrata una risposta di esempio dalla Runs list
chiamata API per un processo in formato multi-attività:
{
"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
}