Condividi tramite


Aggiornamento da API Processi 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 con una singola attività definiti formato a singola attività e processi con più attività definiti formato multi-attività.

L'API Processi 2.0 e 2.1 supportano ora la richiesta di aggiornamento. Usare la richiesta update per modificare un processo esistente anziché la richiesta di ripristino per ridurre al minimo le modifiche tra processi in formato a singola attività e processi in formato multi-attività.

Modifiche API

L'API Processi definisce ora un oggetto TaskSettings per acquisire le impostazioni per ogni attività di un processo. Per i processi in formato multi-attività, il campo tasks, una matrice di strutture di dati TaskSettings, è incluso nell'oggetto JobSettings. Alcuni campi in precedenza appartenenti a JobSettings, fanno ora parte delle impostazioni delle attività per i processi in formato multi-attività. JobSettings viene inoltre aggiornato in modo da includere il campo format. Il campo format indica il formato del processo ed è un valore STRING impostato su SINGLE_TASK o MULTI_TASK.

È necessario aggiornare i client API esistenti per queste modifiche a JobSettings per i processi in formato multi-attività. Per altre informazioni sulle modifiche necessarie, vedere la guida al 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 condiviso consente a più attività nello stesso processo di utilizzare 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à che usa il cluster. Un cluster di processi condiviso non viene terminato quando è inattivo, ma termina solo dopo il completamento di tutte le attività che lo usano. È possibile avviare contemporaneamente più attività non dipendenti che condividono un cluster. Se un cluster di processi condiviso 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 matrice JobCluster 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 campi task. Le librerie non possono essere configurate in una configurazione con cluster di processi condiviso. Nell'esempio seguente il campo libraries 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 a singola attività, la struttura dei dati JobSettings rimane invariata, ad eccezione dell'aggiunta del campo format. Non è inclusa alcuna matrice TaskSettings e le impostazioni dell'attività restano definite al livello superiore della struttura dei dati JobSettings. Non sarà necessario apportare modifiche ai client API esistenti per elaborare processi in formato a 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:

Create (Crea)

Per creare un processo in formato a singola attività tramite l'operazione Create a new job (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 campo tasks in JobSettings per specificare le impostazioni per ogni attività. Nell'esempio seguente viene creato un processo con due attività notebook. Questo esempio è relativo alle API 2.0 e 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
    }
  ]
}

Runs submit (Invio esecuzioni)

Per inviare un'unica esecuzione di un processo in formato a singola attività con l'operazione Create and trigger a one-time run (Crea e attiva un'esecuzione una tantum) (POST /runs/submit) nell'API Processi, non è necessario modificare i client esistenti.

Per inviare un'esecuzione una tantum di un processo in formato multi-attività, usare il campo tasks in JobSettings per specificare le impostazioni per ogni attività, inclusi i cluster. Poiché la richiesta runs submit non supporta i cluster di processi condivisi, quando si invia un processo in formato multi-attività, i cluster devono essere impostati a livello di attività. Vedere Create (Crea) per un esempio JobSettings che specifica più attività.

Update (Aggiorna)

Per aggiornare un processo in formato a singola attività con l'operazione Partially update a job (Aggiorna parzialmente 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 impostazioni task. Vedere Create (Crea) per un esempio JobSettings che specifica più attività.

Reset (Ripristina)

Per sovrascrivere le impostazioni di un processo in formato a singola attività con l'operazione Overwrite all settings for a job (Sovrascrivi tutte le impostazioni di un 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 struttura di dati JobSettings con una matrice di strutture di dati TaskSettings. Vedere Create (Crea) per un esempio JobSettings che specifica più attività.

Usare Update (Aggiorna) per modificare i singoli campi senza passare dal formato a singola attività a quello multi-attività.

List (Elenca)

Per i processi in formato a singola attività, non sono necessarie modifiche client per elaborare la risposta dall'operazione List all jobs (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 struttura Job:

  • Analizzare il campo job_id per il processo in formato multi-attività.
  • Per recuperare i dettagli del processo, passare job_id all'operazione Get a job (Ottieni processo) (GET /jobs/get) nell'API Processi. Per una risposta di esempio dalla chiamata API Get per un processo in formato multi-attività, vedere Get (Ottieni).

L'esempio seguente mostra una risposta contenente processi in formato a singola attività 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"
    }
  ]
}

Get (Ottieni)

Per i processi in formato a singola attività, non sono necessarie modifiche client per elaborare la risposta dall'operazione Get a job (Recupera un processo) (GET /jobs/get) nell'API Processi.

I processi in formato multi-attività restituiscono una matrice di strutture di dati task contenenti le impostazioni delle attività. Se è necessario accedere ai dettagli a livello di attività, è necessario modificare i client per scorrere la matrice tasks ed estrarre i campi obbligatori.

Di seguito viene illustrata una risposta di esempio dalla chiamata API Get per un processo in formato multi-attività. Questo esempio è relativo alle 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"
}

Runs get (Ottieni esecuzioni)

Per i processi in formato a singola attività, non sono necessarie modifiche client per elaborare la risposta dall'operazione Get a job run (Recupera un'esecuzione di processo) (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 run_id per ogni attività.
  • Chiamare l'operazione Get the output for a run (GET /jobs/runs/get-output) con run_id per ottenere i dettagli sull'esecuzione per ogni attività. Di seguito è riportato un esempio di risposta per 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"
}

Runs get output (Ottieni output esecuzioni)

Per i processi in formato a singola attività, non sono necessarie modifiche client per elaborare la risposta dall'operazione Get the output for a run (Recupera l'output per un'esecuzione) (GET /jobs/runs/get-output) nell'API Processi.

Per i processi in formato multi-attività, la chiamata Runs get output a un'esecuzione di livello superiore 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 la richiesta Get the output for a run (Ottieni l'output di una esecuzione).
  • Scorrere i campi di livello inferiore run_id nella risposta.
  • Usare i valori di livello inferiore run_id per chiamare Runs get output.

Runs list (Elenco esecuzioni)

Per i processi in formato a singola attività, non sono necessarie modifiche client per elaborare la risposta dall'operazione List runs for a job (Elenca esecuzioni per un processo) (GET /jobs/runs/list).

Per i processi in formato multi-attività, viene restituita una matrice vuota tasks. Passare run_id all'operazione Get a job run (Ottieni l'esecuzione di un processo) (GET /jobs/runs/get) per recuperare le attività. Di seguito viene illustrata una risposta di esempio dalla chiamata API Runs list 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
}