Frissítés a Jobs API 2.0-ról 2.1-esre

Mostantól több feladatot is vezényelhet az Azure Databricks-feladatokkal. Ez a cikk a több feladattal rendelkező feladatokat támogató Feladatok API módosításait ismerteti, és útmutatást nyújt a meglévő API-ügyfelek frissítéséhez az új funkció használatához.

A Databricks a Jobs API 2.1-et javasolja AZ API-szkriptekhez és az ügyfelekhez, különösen akkor, ha több feladattal rendelkező feladatokat használ.

Ez a cikk azokat a feladatokat ismerteti, amely egyetlen tevékenységként van meghatározva, és több tevékenységből álló többfeladatos formátummal definiált feladatokra.

A Jobs API 2.0 és 2.1 mostantól támogatja a frissítési kérést. A kéréssel update az alaphelyzetbe állítási kérés helyett egy meglévő feladatot is módosíthat, így minimalizálhatja az egyfeladatos és a többfeladatos formátumú feladatok közötti változásokat.

API-változások

A Feladatok API mostantól definiál egy TaskSettings objektumot, amely rögzíti a feladatok minden egyes tevékenységének beállításait. Többfeladatos formátumú feladatok esetén az objektum tartalmazza az tasks adatstruktúrák tömbjeként TaskSettings szolgáló JobSettings mezőt. Egyes mezők, amelyek korábban részei JobSettings voltak, most már a többfeladatos formátumfeladatok tevékenységbeállításainak részét képezik. JobSettings a mező is format frissül. A format mező a feladat formátumát jelzi, és a STRING következő értékre SINGLE_TASK van állítva: vagy MULTI_TASK.

A meglévő API-ügyfeleket frissítenie kell ezekhez a módosításokhoz a Feladat Gépház többfeladatos formátumú feladatokhoz. A szükséges módosításokról további információt az API-ügyfél útmutatójában talál.

A Jobs API 2.1 támogatja a többfeladatos formátumot. Minden API 2.1-kérésnek meg kell felelnie a többfeladatos formátumnak, a válaszok pedig többfeladatos formátumban vannak strukturálva. Az API 2.1-hez először új funkciók jelennek meg.

A Jobs API 2.0 egy további mezővel frissül, amely támogatja a többfeladatos formátumú feladatokat. A dokumentumban szereplő példák az API 2.0-t használják. A Databricks azonban az API 2.1-et javasolja új és meglévő API-szkriptekhez és -ügyfelekhez.

Példa JSON-dokumentum az API 2.0 és 2.1 többfeladatos formátumfeladatára:

{
  "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 Jobs API 2.1 támogatja a feladatszintű fürtök vagy egy vagy több megosztott feladatfürt konfigurálását:

  • A tevékenységszintű fürt akkor jön létre és indul el, amikor egy tevékenység elindul, és a tevékenység befejezésekor leáll.
  • A megosztott feladatfürt lehetővé teszi, hogy ugyanabban a feladatban több tevékenység is használja a fürtöt. A fürt akkor jön létre és indul el, amikor a fürtöt használó első tevékenység elindul, és a fürt használatával végzett utolsó tevékenység befejeződése után fejeződik be. A megosztott feladatfürt nem áll le tétlen állapotban, hanem csak az azt használó összes tevékenység befejezése után fejeződik be. Egyszerre több nem függő, fürtöt használó tevékenység is elindulhat. Ha egy megosztott feladatfürt meghiúsul, vagy az összes tevékenység befejezése előtt leáll, létrejön egy új fürt.

A megosztott feladatfürtök konfigurálásához adjon meg egy JobCluster tömböt az JobSettings objektumban. Feladatonként legfeljebb 100 fürtöt adhat meg. Az alábbi példa egy API 2.1-válaszra egy két megosztott fürttel konfigurált feladatra:

Megjegyzés:

Ha egy tevékenység erőforrástár-függőségekkel rendelkezik, a tárakat a task mezőbeállításokban kell konfigurálnia; a tárak nem konfigurálhatók megosztott feladatfürt-konfigurációban. Az alábbi példában a libraries feladat konfigurációjának mezője ingest_orders egy erőforrástár-függőség specifikációját mutatja be.

{
  "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"
}

Az egyfeladatos formátumú feladatok esetében az JobSettings adatstruktúra változatlan marad, kivéve a mező hozzáadását format . Nincs TaskSettings tömb, és a tevékenységbeállítások az adatstruktúra legfelső szintjén JobSettings maradnak definiálva. Az egyfeladatos formátumfeladatok feldolgozásához nem kell módosítania a meglévő API-ügyfeleket.

Egy példa JSON-dokumentum, amely egy feladatformátumú feladatot jelöl az API 2.0-hoz:

{
  "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-ügyfél útmutatója

Ez a szakasz irányelveket, példákat és szükséges módosításokat tartalmaz az új többfeladatos formátum funkció által érintett API-hívásokhoz.

Ebben a szakaszban:

Létrehozása

Ha egy feladatformátumú feladatot szeretne létrehozni az Új feladat létrehozása művelettel (POST /jobs/create) a Jobs API-ban, nem kell módosítania a meglévő ügyfeleket.

Többfeladatos formátumfeladat létrehozásához a mező használatával JobSettings adja meg az tasks egyes tevékenységek beállításait. Az alábbi példa egy feladatot hoz létre két jegyzetfüzet-feladattal. Ez a példa az API 2.0 és 2.1 esetén:

Megjegyzés:

Feladatonként legfeljebb 100 tevékenység adható meg.

{
  "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
    }
  ]
}

Futtatási küldés

Ha egy feladatformátumú feladat egyszeri futtatását szeretné elküldeni a Feladatok API-ban az egyszeri futtatási művelet (POST /runs/submit) létrehozásával és aktiválásával, akkor nem kell módosítania a meglévő ügyfeleket.

Többfeladatos formátumú feladat egyszeri futtatásának elküldéséhez a mezőben JobSettings adja meg az egyes tevékenységek beállításait, beleértve a tasks fürtöket is. A fürtöket a feladat szintjén kell beállítani többfeladatos formátumfeladat elküldésekor, mert a kérés nem támogatja a runs submit megosztott feladatfürtöket. A több tevékenységet meghatározó példa a Létrehozás című témakörben JobSettings olvasható.

Frissítés

Ha egy feladatformátumú feladatot szeretne frissíteni a Feladatok API részben frissített feladatműveletével (POST /jobs/update), akkor nem kell módosítania a meglévő ügyfeleket.

A többfeladatos formátumfeladat beállításainak frissítéséhez az új beállítások azonosításához task az egyedi task_key mezőt kell használnia. A több tevékenységet meghatározó példa a Létrehozás című témakörben JobSettings olvasható.

Orrgazdaság

Ha egy feladatformátumú feladat beállításait felül szeretné írni a Feladatok API-ban egy feladatművelet (POST /jobs/reset) összes beállításának felülírásával, nem kell módosítania a meglévő ügyfeleket.

A többfeladatos formátumfeladat beállításainak felülírásához adjon meg egy adatstruktúrát JobSettings adatstruktúrák tömbjével TaskSettings . A több tevékenységet meghatározó példa a Létrehozás című témakörben JobSettings olvasható.

Az Update használatával anélkül módosíthatja az egyes mezőket, hogy egyetlen tevékenységről többfeladatos formátumra váltana.

Lista

Egyfeladatos formátumú feladatok esetén nincs szükség ügyfélmódosításokra a Feladatok API Összes feladatlista műveletének (GET /jobs/list) válaszának feldolgozásához.

Többfeladatos formátumú feladatok esetén a legtöbb beállítás a feladat szintjén van definiálva, nem pedig a feladat szintjén. Előfordulhat, hogy a fürtkonfiguráció a feladat vagy a feladat szintjén van beállítva. Ha módosítani szeretné az ügyfeleket, hogy hozzáférjenek a struktúrában visszaadott többfeladatos formátumfeladat fürt- vagy feladatbeállításaihoz Job :

  • Elemezze a job_id többfeladatos formátumfeladat mezőjét.
  • Adja át a job_idFeladat lekérése API Feladat lekérése műveletének (GET /jobs/get) a feladat részleteinek lekéréséhez. A többfeladatos formátumfeladat api-hívásából kapott példaválaszt lásd : Get for a example response from the Get API call for a multi-task format job.

Az alábbi példa egy egy- és többfeladatos formátumú feladatokat tartalmazó választ mutat be. Ez a példa az API 2.0-hoz készült:

{
  "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"
    }
  ]
}

Kap

Az egyfeladatos formátumú feladatok esetében nincs szükség ügyfélmódosításokra a Feladat API Feladat lekérése műveletének (GET /jobs/get) válaszának feldolgozásához.

A többfeladatos formátumú feladatok feladatbeállításokat tartalmazó adatstruktúrák tömböt task adnak vissza. Ha hozzáférésre van szüksége a feladatszint részleteihez, módosítania kell az ügyfeleket, hogy a tömbön keresztül iteráljon, és kinyerje a tasks szükséges mezőket.

Az alábbiakban egy többfeladatos formátumfeladat API-hívására Get adott példaválasz látható. Ez a példa az API 2.0 és 2.1 esetén:

{
  "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"
}

Futtatások lekérése

Az egyfeladatos formátumú feladatok esetében nincs szükség ügyfélmódosításokra a Feladatok API Feladatfuttatási műveletének (GET /jobs/runs/get) válaszának feldolgozásához.

A többfeladatos formátumú feladatfuttatás válasza a következő tömböt TaskSettingstartalmazza: . Az egyes tevékenységek futtatási eredményeinek lekérése:

  • Iterálja végig az egyes feladatokat.
  • Elemezd az run_id egyes tevékenységekhez tartozókat.
  • Hívja meg a Futtatási művelet kimenetének lekérése (GET /jobs/runs/get-output) elemet az run_id egyes tevékenységek futtatási adatainak lekéréséhez. A következő példa a kérés válasza:
{
  "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"
}

Lekéréses kimenet futtatása

Egyfeladatos formátumú feladatok esetén nincs szükség ügyfélmódosításra a Feladat API-ban futó művelet kimenetének lekérése (GET /jobs/runs/get-output) válaszának feldolgozásához.

Többfeladatos formátumú feladatok esetén a szülőfuttatás meghívása Runs get output hibát eredményez, mivel a futtatási kimenet csak az egyes tevékenységekhez érhető el. Többfeladatos formátumfeladat kimenetének és metaadatainak lekérése:

  • Hívja meg a Futtatási kérelem kimenetének lekérése parancsot.
  • Iterálja át a válasz gyermekmezőit run_id .
  • Hívja meg a gyermekértékeket run_idRuns get output.

Futtatás lista

Az egyfeladatos formátumú feladatok esetében nincs szükség ügyfélmódosításra a feladatműveletGET /jobs/runs/list () listából érkező válasz feldolgozásához.

Többfeladatos formátumú feladatok esetén a függvény üres tasks tömböt ad vissza. Adja át a run_idFeladat lekérése műveletnek (GET /jobs/runs/get) a feladatok lekéréséhez. Az alábbi példában egy többfeladatos formátumfeladat API-hívásának Runs list válasza látható:

{
  "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
}