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ása
- Futtatások küldése
- frissítés
- Visszaállítás
- Lista
- lekérése
- futtatás
- A futtatásoknak kimenete van
- Futtatások listája
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 tasks
JobSettings
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 megGet
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 (
A többfeladatos formátumú feladatfuttatás válasza TaskSettings
tö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
) arun_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 aRuns get output
meghí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 (
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
}