Megosztás a következőn keresztül:


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

Mostantól több feladatot is összehangolhat az Azure Databricks feladatok. Ez a cikk a Jobs API módosításait ismerteti, amelyek több feladattal rendelkező feladatokat támogatnak, é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, egyfeladatos és több tevékenységből többfeladatos.

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

API-módosítások

A Feladatok API mostantól definiál egy TaskSettings objektumot a feladatok minden egyes tevékenységének beállításainak rögzítéséhez. Többfeladatos formátumú feladatok esetén a tasks mező, amely TaskSettings adatstruktúrák tömbje, szerepel a JobSettings objektumban. A JobSettings egyes mezői mostantól a többfeladatos formátumú feladatok tevékenységbeállításainak részét képezik. A JobSettings frissítésre került, hogy tartalmazza a format mezőt. A format mező a feladat formátumát jelzi, és STRING érték SINGLE_TASK vagy MULTI_TASKértékre van állítva.

Frissítenie kell a meglévő API-ügyfeleket ezekhez a módosításokhoz a JobSettingsra a többfeladatos formátumú feladatok esetében. A szükséges módosításokról további információt a 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 ennek a formátumnak, és a válaszok ebben a formátumban vannak strukturálva.

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ű vagy egy vagy több megosztott feladatfürt konfigurálását.

  • A feladat szintű fürt létrejön és elindul, amikor egy feladat kezdődik, és lezárul, amikor a feladat befejeződik.
  • Egy megosztott munkafürt lehetővé teszi, hogy ugyanabban az állásban több feladat 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 független, fürtöt megosztó feladat 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.

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

Jegyzet

Ha egy tevékenység erőforrástár-függőségekkel rendelkezik, konfigurálnia kell a kódtárakat a task mezőbeállításokban; a kódtárak nem konfigurálhatók megosztott feladatfürt-konfigurációban. Az alábbi példában a libraries feladat konfigurációjának ingest_orders mezője egy kódtárfü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 a JobSettings adatstruktúra változatlan marad, kivéve a format mező hozzáadását. Nincs TaskSettings tömb, és a tevékenységbeállítások a JobSettings adatstruktúra felső szintjén 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ás

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

Többfeladatos formátumfeladat létrehozásához használja a tasksJobSettings mezőjét az egyes tevékenységek beállításainak megadásához. 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:

Jegyzet

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ás beküldése

A Egyszeri futtatás létrehozása és aktiválása (POST /runs/submit) művelettel a Jobs API-ban nem igényli a meglévő kliensalkalmazások módosítását, ha egy egyfeladatos formátumú munka egyszeri futtatását szeretné benyújtani.

Többfeladatú formátumú feladat egyszeri futtatásának benyújtásához használja a tasks mező JobSettings részét az egyes tevékenységek beállításainak megadására, beleértve a klasztereket is. A feladatfürtöket feladat szinten kell beállítani, amikor többfeladatos formátumú feladatot nyújtanak be, mert a runs submit kérés nem támogatja a megosztott feladatfürtöket. Tekintse meg létrehozása egy példaként, JobSettings több feladatot megadva.

frissítés

Ha egy egyszerű feladatformátumú feladatot szeretne frissíteni a Feladatok API-ban található művelet (POST /jobs/update) részleges frissítésével, nem kell módosítania a meglévő ügyfeleket.

A többfeladatos formátumfeladat beállításainak frissítéséhez az új task_key-beállítások azonosításához az egyedi task mezőt kell használnia. Tekintse meg létrehozása egy példaként, JobSettings több feladatot megadva.

Alaphelyzetbe állítás

Egy egyfeladatos formátumú feladat beállításainak felülírásához az Feladat összes beállításának felülírása művelettel (POST /jobs/reset) a Feladatok API-n keresztül, nem szükséges módosítania a meglévő klienskódokat.

A többfeladatos formátumfeladat beállításainak felülírásához adjon meg egy JobSettings adatstruktúrát TaskSettings adatstruktúrák tömbjével. Tekintse meg létrehozása egy példaként, JobSettings több feladatot megadva.

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

Az egyfeladatos formátumú feladatok esetében nincs szükség ügyfélmódosításra a feladatok API-ban a Összes feladat listázása művelet (GET /jobs/list) 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 munka szintjén van beállítva. Az ügyfelek hozzáférési beállításainak módosítása a többfeladatos formátumú feladatok fürt- vagy feladatbeállításainak eléréséhez a Job struktúrában visszaadva:

  • Elemezze a job_id mezőt a többfeladatos formátumú feladatnál.
  • A feladatok részleteinek lekéréséhez adja át a job_id a Feladatok API-ban található Feladat lekérése műveletnek (GET /jobs/get). A többfeladatos formátumfeladat API-hívásából származó példaért tekintse meg Get lekérése című témakört.

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

lekérése

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

A többfeladatos formátumú feladatok task adatstruktúrákból álló tömböt adnak vissza, amelyek tevékenységbeállításokat tartalmaznak. Ha hozzá kell férnie a feladat szintű részletekhez, módosítania kell a klienseket, hogy végigmenjen az tasks tömbön, és kinyerje a szükséges mezőket.

Az alábbiakban egy többfeladatos feladat Get API-hívásából származó 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 indítása

Az egyfeladatos formátumú feladatok esetében nincs szükség ügyfélmódosításra a Feladat API-ban a feladatfuttatási művelet () válaszának feldolgozásához.

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

  • Iterálja végig az egyes feladatokat.
  • Az egyes tevékenységekhez tartozó run_id értelmezése.
  • Az egyes feladatok futtatásának részleteiért hívja meg a -t, és szerezze be a futtatási művelet kimenetét (GET /jobs/runs/get-output) a run_id segítségével. 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"
}

Futtatások kimenete

Az egyfeladatos formátumú feladatok esetében nincs szükség ügyfélmódosításokra a A futtatási művelet kimenetének lekérése (GET /jobs/runs/get-output) a Feladatok API-ban.

Többfeladatos formátumú feladatok esetén a szülőfuttatáson Runs get output meghívása 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:

  • Indítson egy hívást, majd kérje le a futtatási kérés eredményét.
  • Iterálja át a gyermek run_id mezőket a válaszban.
  • Használja a run_id gyermekértékeit a Runs get outputmeghívásához.

futtatások listája

Egyfeladatos formátumú feladatok esetén nincs szükség ügyfélmódosításra a feladat művelethez () futó listából származó válasz feldolgozásához.

Többfeladatos formátumú feladatok esetén a függvény üres tasks tömböt ad vissza. A feladatok lekéréséhez adja át a run_id-at a -nek a műveletet a munka futtatásához (GET /jobs/runs/get). Az alábbi példában egy többfeladatos feladat Runs list API-hívásának 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
}