Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Agora você pode orquestrar várias tarefas com trabalhos do Azure Databricks. Este artigo detalha as alterações na API de Trabalhos que dão suporte a trabalhos com várias tarefas e tem orientação para ajudá-lo a atualizar seus clientes de API existentes para trabalhar com esse novo recurso.
O Databricks recomenda a API de Trabalhos 2.1 para seus scripts e clientes de API, especialmente ao usar trabalhos com várias tarefas.
Este artigo refere-se a trabalhos definidos com uma única tarefa como formato de tarefa única e trabalhos definidos com várias tarefas como formato de várias tarefas.
Jobs API 2.0 e 2.1 agora dão suporte à solicitação de atualização. Use a solicitação update para alterar um trabalho existente em vez da solicitação de redefinição para minimizar as alterações entre trabalhos de formato de tarefa única e trabalhos de formato de várias tarefas.
Alterações de API
A API de Trabalhos agora define um TaskSettings objeto para capturar as configurações de cada tarefa em um trabalho. Para trabalhos de formato de várias tarefas, o campo tasks, uma matriz de estruturas de dados TaskSettings, está incluído no objeto JobSettings. Alguns campos que anteriormente faziam parte de JobSettings agora fazem parte das configurações de tarefa para trabalhos no formato de várias tarefas.
JobSettings também é atualizado para incluir o format campo. O format campo indica o formato do trabalho e é um STRING valor definido como SINGLE_TASK ou MULTI_TASK.
Você precisa atualizar seus clientes de API existentes para essas alterações no JobSettings para tarefas no formato de múltiplas tarefas. Consulte o guia do cliente da API para obter mais informações sobre as alterações necessárias.
A Jobs API 2.1 dá suporte ao formato multitarefas. Todas as solicitações da API 2.1 devem estar em conformidade com esse formato e as respostas são estruturadas nesse formato.
A API de Empregos 2.0 é atualizada com um campo adicional para dar suporte a trabalhos em formato multitarefa. Exceto quando observado, os exemplos neste documento usam a API 2.0. No entanto, o Databricks recomenda a API 2.1 para scripts e clientes de API novos e existentes.
Um documento JSON de exemplo que representa uma tarefa em formato multitarefa para a 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"
}
A API de Trabalhos 2.1 dá suporte à configuração de clusters de nível de tarefa ou um ou mais clusters de trabalho compartilhados:
- Um cluster de nível de tarefa é criado e iniciado quando uma tarefa é iniciada e termina quando a tarefa é concluída.
- Um cluster de trabalho compartilhado permite que várias tarefas no mesmo trabalho usem o cluster. O cluster é criado e iniciado quando a primeira tarefa usando o cluster é iniciada e termina após a última tarefa usando o cluster ser concluída. Um cluster de trabalho compartilhado não é encerrado quando ocioso, mas termina somente depois que todas as tarefas que o usam são concluídas. Várias tarefas não dependentes que compartilham um cluster podem começar ao mesmo tempo. Se um cluster de trabalho compartilhado falhar ou for encerrado antes de todas as tarefas serem concluídas, um novo cluster será criado.
Para configurar clusters de trabalho compartilhado, inclua uma JobCluster matriz no JobSettings objeto. Você pode especificar um máximo de 100 clusters por trabalho. Veja a seguir um exemplo de uma resposta da API 2.1 para um trabalho configurado com dois clusters compartilhados:
Observação
Se uma tarefa tiver dependências de biblioteca, você deverá definir as bibliotecas nas configurações de campo; as task bibliotecas não poderão ser configuradas em uma configuração de cluster de trabalho compartilhado. No exemplo a seguir, o campo libraries na configuração da tarefa ingest_orders demonstra a especificação de uma dependência de biblioteca.
{
"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"
}
Para trabalhos de formato de tarefa única, a JobSettings estrutura de dados permanece inalterada, exceto pela adição do format campo. Nenhuma TaskSettings matriz está incluída e as configurações de tarefa permanecem definidas no nível superior da JobSettings estrutura de dados. Você não precisará fazer alterações em seus clientes de API existentes para processar trabalhos de formato de tarefa única.
Um documento JSON de exemplo que representa uma tarefa de formato único para a 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"
}
Guia do cliente da API
Esta seção fornece diretrizes, exemplos e alterações necessárias para chamadas à API afetadas pelo novo recurso de formato de várias tarefas.
Nesta seção:
- Criar
- Execuções de envio
- Atualização
- Redefinir
- Lista
- Obter
- Execuções obtidas
- Os resultados de execução são exibidos
- Lista de processamentos
Criar
Para criar um trabalho de formato de tarefa única por meio da operação Criar um novo trabalho (POST /jobs/create) na API de Trabalhos, você não precisa alterar os clientes existentes.
Para criar uma tarefa no formato multitarefas, use o campo JobSettings em tasks para especificar os parâmetros para cada tarefa. O exemplo a seguir cria um trabalho com duas tarefas de notebook. Este exemplo é para a API 2.0 e 2.1:
Observação
Um máximo de 100 tarefas pode ser especificado por trabalho.
{
"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
}
]
}
Execuções de envio
Para enviar uma execução única de um trabalho no formato de uma única tarefa com a operação Criar e acionar uma execução única (POST /runs/submit) na Jobs API, não é necessário alterar os clientes existentes.
Para enviar uma execução única de um trabalho de formato de várias tarefas, use o tasks campo JobSettings para especificar configurações para cada tarefa, incluindo clusters. Os clusters devem ser definidos no nível da tarefa ao enviar um trabalho de formato de várias tarefas porque a solicitação runs submit não dá suporte a clusters de trabalho compartilhados. Consulte Criar para obter um exemplo JobSettings que especifica várias tarefas.
Atualização
Para atualizar um trabalho no formato de tarefa única com a operação Atualizar parcialmente um trabalho (POST /jobs/update) na API de Trabalhos, você não precisa alterar as aplicações existentes.
Para atualizar as configurações de um trabalho de formato de várias tarefas, você deve usar o campo exclusivo task_key para identificar novas task configurações. Consulte Criar para obter um exemplo JobSettings que especifica várias tarefas.
Reset
Para substituir as configurações de um trabalho em formato de tarefa única com a operação Substituir todas as configurações de um trabalho na API de Trabalhos, não é necessário alterar os clientes existentes.
Para substituir as configurações de um trabalho de formato de várias tarefas, especifique uma JobSettings estrutura de dados com uma matriz de estruturas de TaskSettings dados. Consulte Criar para obter um exemplo JobSettings que especifica várias tarefas.
Use Atualizar para alterar campos individuais sem mudar de formato de tarefa única para formato multitasca.
Lista
Para trabalhos de formato de tarefa única, nenhuma alteração de cliente é necessária para processar a resposta da operação Listar todos os trabalhos (GET /jobs/list) na API de Trabalhos.
Para trabalhos de formato de várias tarefas, a maioria das configurações é definida no nível da tarefa e não no nível do trabalho. A configuração do cluster pode ser definida no nível da tarefa ou do trabalho. Para modificar clientes a fim de acessar as configurações de cluster ou de tarefa para uma tarefa de formato múltiplo retornada na estrutura Job:
- Analise o campo
job_idpara o trabalho de formato multitarefa. - Passe o
job_idpara a operação Obter emprego (GET /jobs/get) na API de Vagas para recuperar detalhes do emprego. Consulte Get para uma resposta de exemplo da chamada àGetAPI para um trabalho de formato de tarefas múltiplas.
O exemplo a seguir mostra uma resposta que contém trabalhos de formato de tarefa única e várias tarefas. Este exemplo é para a 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"
}
]
}
Obter
Para trabalhos de formato de tarefa única, nenhuma alteração de cliente é necessária para processar a resposta da operação Obter um trabalho (GET /jobs/get) na API de Trabalhos.
Trabalhos em formato multitarefa retornam um array de estruturas de task dados que contêm configurações de tarefa. Se você precisar de acesso aos detalhes no nível de tarefa, será necessário modificar seus clientes de software para iterar por meio da matriz tasks e extrair os campos necessários.
O exemplo a seguir mostra uma resposta de exemplo da chamada à Get API para um trabalho de formato de várias tarefas. Este exemplo é para a 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"
}
Execuções
Para trabalhos de formato de tarefa única, nenhuma alteração de cliente é necessária para processar a resposta da operação Obter execução de um trabalho (GET /jobs/runs/get) na API de Trabalhos.
A resposta para uma execução de trabalhos em formato multitarefa contém uma matriz de TaskSettings. Para recuperar resultados de execução para cada tarefa:
- Percorrer cada uma das tarefas.
- Analise o
run_idde cada tarefa. - Chame a operação Obter a saída de uma execução (
GET /jobs/runs/get-output) comrun_idpara obter detalhes sobre a execução de cada tarefa. Veja a seguir um exemplo de resposta desta solicitação:
{
"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"
}
Execuções de processos produzem saída
Para tarefas de formato único, nenhuma alteração do cliente é necessária para processar a resposta da obtenção da saída de uma execução (GET /jobs/runs/get-output) na API de Trabalhos.
Para trabalhos com formato de múltiplas tarefas, chamar Runs get output em uma execução pai resulta em um erro, pois os resultados da execução estão disponíveis apenas para tarefas individuais. Para obter a saída e os metadados de um trabalho de formato de várias tarefas:
- Realize a chamada para a solicitação Obtenha a saída de uma execução.
- Iterar sobre os campos filho
run_idna resposta. - Use os valores filho
run_idpara chamarRuns get output.
Lista de execuções
Para trabalhos no formato de tarefa única, nenhuma alteração de cliente é necessária para processar a resposta da operação Listar execuções para um trabalho (GET /jobs/runs/list).
Para formatos de trabalhos com várias tarefas, uma matriz vazia tasks é retornada. Passe o run_id para a operação Obter execução de trabalho (GET /jobs/runs/get) para recuperar as tarefas. O seguinte é um exemplo de resposta da chamada à API Runs list para um trabalho com formato de várias tarefas:
{
"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
}