İşler API 2.0'dan 2.1'e güncelleştirme
Artık Azure Databricks görevleriile birden çok işi düzenleyebilirsiniz. Bu makalede, birden çok görevi olan işleri destekleyen
Databricks, özellikle birden çok görevi olan işleri kullanırken API betikleriniz ve istemcileriniz için İşler API 2.1'i önerir.
Bu makale, tek bir görevle
Jobs API 2.0 ve 2.1 artık güncelleştirme isteğini destekler. Tek görev biçimli işler ile çok görevli biçim işleri arasındaki değişiklikleri en aza indirmek için update
isteği yerine var olan bir işi değiştirmek için isteğini kullanın.
API değişiklikleri
İşler API'si artık bir işteki her görevin ayarlarını yakalamak için bir TaskSettings
nesnesi tanımlıyor. Çok görevli biçim işleri için, bir dizi tasks
veri yapısından oluşan TaskSettings
alanı JobSettings
nesnesine dahil edilir. Daha önce JobSettings
parçası olan bazı alanlar artık çok görevli biçim işleri için görev ayarlarının bir parçasıdır.
JobSettings
, format
alanını içerecek şekilde de güncelleştirilir.
format
alanı işin biçimini gösterir ve STRING
veya SINGLE_TASK
olarak ayarlanmış bir MULTI_TASK
değeridir.
Çok görevli biçim işleri için JobSettings'de yapılan bu değişiklikler için mevcut API istemcilerinizi güncelleştirmeniz gerekir. Gerekli değişiklikler hakkında daha fazla bilgi için API istemci kılavuzuna bakın.
İşler API'si 2.1, çok görevli biçimi destekler. Tüm API 2.1 istekleri bu biçime uygun olmalıdır ve yanıtlar bu biçimde yapılandırılmıştır.
İşler API'si 2.0, çok görevli biçim işlerini desteklemek için ek bir alanla güncelleştirilir. Belirtildiği durumlar dışında, bu belgedeki örneklerde API 2.0 kullanılır. Ancak Databricks, yeni ve mevcut API betikleri ve istemcileri için API 2.1'i önerir.
API 2.0 ve 2.1 için çok görevli biçim işini temsil eden örnek bir JSON belgesi:
{
"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"
}
İşler API'si 2.1, görev düzeyi kümelerinin veya bir veya daha fazla paylaşılan iş kümesinin yapılandırmasını destekler:
- Bir görev başladığında, bir görev düzeyi kümesi oluşturulur ve başlatılır; görev tamamlandığında ise sonlandırılır.
- Paylaşılan iş kümesi, aynı işteki birden çok görevin kümeyi kullanmasına izin verir. Kümeyi kullanan ilk görev başlatıldığında ve kümeyi kullanan son görev tamamlandıktan sonra sonlandırıldığında küme oluşturulur ve başlatılır. Paylaşılan iş kümesi boşta olduğunda sonlandırılmaz, ancak yalnızca kullanan tüm görevler tamamlandıktan sonra sonlandırılır. Bir kümeyi paylaşan birden çok bağımlı olmayan görev aynı anda başlayabilir. Paylaşılan bir iş kümesi başarısız olursa veya tüm görevler tamamlanmadan sonlandırılırsa yeni bir küme oluşturulur.
Paylaşılan iş kümelerini yapılandırmak için JobCluster
nesnesine bir JobSettings
dizisi ekleyin. İş başına en fazla 100 küme belirtebilirsiniz. Aşağıda, iki paylaşılan kümeyle yapılandırılmış bir iş için API 2.1 yanıtı örneği verilmiştir:
Not
Bir görevin kitaplık bağımlılıkları varsa, task
alan ayarlarında kitaplıkları yapılandırmanız gerekir; kitaplıkları paylaşılan bir iş kümesi yapılandırmasında yapılandırılamaz. Aşağıdaki örnekte, libraries
görevinin yapılandırmasındaki ingest_orders
alanı kitaplık bağımlılığının belirtimini gösterir.
{
"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"
}
Tek görev biçimli işler için, JobSettings
alanının eklenmesi dışında format
veri yapısı değişmeden kalır. hiçbir TaskSettings
dizisi dahil değildir ve görev ayarları JobSettings
veri yapısının en üst düzeyinde tanımlanmış olarak kalır. Tek görev biçimli işleri işlemek için mevcut API istemcilerinizde değişiklik yapmanız gerekmez.
API 2.0 için tek görev biçimli işi temsil eden örnek bir JSON belgesi:
{
"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 müşteri kılavuzu
Bu bölümde, yeni çok görevli biçim özelliğinden etkilenen API çağrıları için yönergeler, örnekler ve gerekli değişiklikler sağlanır.
Bu bölümde:
- Oluştur
- Çalıştırmaları gönder
- güncelleştirme
- Sıfırlama
- Listesi
- Get
- Çalıştırmaları
- Çalıştırmaları çıkış alır
- Çalıştırma Listesi
Oluştur
İşler API'sindeki Yeni iş oluşturma işlemi (POST /jobs/create
) aracılığıyla tek görev formatında bir iş oluşturmak için var olan istemcileri değiştirmeniz gerekmez.
Birden çok görev biçimli bir iş oluşturmak için tasks
'daki JobSettings
alanını kullanarak her görevin ayarlarını belirtin. Aşağıdaki örnek, iki not defteri görevi içeren bir iş oluşturur. Bu örnek API 2.0 ve 2.1 içindir:
Not
İş başına en fazla 100 görev belirtilebilir.
{
"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
}
]
}
Çalıştırmaları gönderme
Tek seferlik bir görev biçimi işi göndermek için İşler API'sinde Oluşturma ve tetikleme işlemini (POST /runs/submit
) kullanarak var olan istemcileri değiştirmeniz gerekmez.
Çok görevli biçim işinin tek seferlik bir çalıştırmasını göndermek için, kümeler de dahil olmak üzere her görevin ayarlarını belirtmek üzere tasks
'daki JobSettings
alanını kullanın.
runs submit
isteği paylaşılan iş kümelerini desteklemediğinden, çok görev biçimli bir iş gönderirken kümelerin görev düzeyinde ayarlanması gerekir. Birden çok görev belirtmeye örnek için bkz. JobSettings
.
Güncelleştirmesi
tek görev biçimli bir işi İşler API'sindeki bir işi kısmen güncelleştirme işlemiyle (POST /jobs/update
) güncelleştirmek için var olan istemcileri değiştirmeniz gerekmez.
Çok görevli biçim işinin ayarlarını güncellemek için, benzersiz task_key
alanını kullanarak yeni task
ayarlarını tanımlamanız gerekir. Birden çok görev belirtmeye örnek için bkz. JobSettings
.
sıfırla
Job API'sinde, bir iş için tüm ayarları üzerine yazma işlemi (POST /jobs/reset
) yaparak tek görev biçimli bir işin ayarlarının üzerine yazmak istiyorsanız, mevcut istemcilerde değişiklik yapmanıza gerek yoktur.
Çoklu görev format işinin ayarlarının üzerine yazmak için, JobSettings
veri yapısını, TaskSettings
veri yapılarından oluşan bir diziyle belirtin. Birden çok görev belirtmeye örnek için bkz. JobSettings
.
Update kullanarak tek tek görev biçiminden çok görevli biçime geçmeden tek tek alanları değiştirin.
Listesi
Tek görev biçimli işler için, İşler API'sindeki Tüm işleri listele işlemi (GET /jobs/list
) yanıtını işlemek için istemci değişikliği gerekmez.
Çok görevli biçim işleri için çoğu ayar iş düzeyinde değil görev düzeyinde tanımlanır. Küme yapılandırması görev veya iş düzeyinde ayarlanabilir. istemcileri, Job
yapısında döndürülen çok görev biçimli bir işin küme veya görev ayarlarına erişebilmesi için değiştirmek üzere:
-
job_id
alanını çoklu görev formatlı iş için ayrıştırın. - İş ayrıntılarını almak için İşler API'sinden Job alma işlemi için
'i 'a iletin ( ). Çok görevli biçim işi için API çağrısından örnek bir yanıtı görmek için bkz. Get
alma.
Aşağıdaki örnekte tek görevli biçimdeki ve çok görevli biçimdeki işler içeren bir yanıt gösterilmektedir. Bu örnek API 2.0 içindir:
{
"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"
}
]
}
İndir
Tek görev formatlı işler için, İşler API'sindeki İş Al işlemi (
Çoklu görev formatı işleri, görev ayarlarını içeren task
veri yapıları dizisi döndürür. Görev düzeyi ayrıntılarına erişmeniz gerekiyorsa, istemcilerinizi tasks
dizisinde dolaşacak şekilde değiştirip, gerekli alanları çıkarmanız gerekir.
Aşağıda, çok görevli biçim işi için Get
API çağrısından örnek bir yanıt gösterilmektedir. Bu örnek API 2.0 ve 2.1 içindir:
{
"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"
}
Çalıştırmaları al
Tek görev biçimli işler için İşler API'sindeki İş çalıştır işlemi (
Çok görevli formatta bir işin çalıştırılmasının yanıtı bir dizi TaskSettings
içerir. Her görevin çalıştırma sonuçlarını almak için:
- Görevlerin her birinde yineleme yapın.
- Her bir görevi için
run_id
'ı ayrıştırın. -
işleminin (
GET /jobs/runs/get-output
) çıktısını alın. Bu istekten örnek bir yanıt aşağıda verilmiştir:
{
"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"
}
Çalıştırmaları çıkış alır
Tek görev formatlı işler için, İşler API'sindeki ) çıkışını almak için istemci değişikliği gerekmez.
Çok görevli biçim işleri için, bir ana çalışmada Runs get output
çağrılması bir hatayla sonuçlanır çünkü çalışma çıkışı yalnızca tek tek görevler için kullanılabilir. Çok görevli format işinin çıktısını ve meta verilerini almak için:
- Çağırın , çalıştırma isteğinin çıktısını alın.
- Yanıttaki alt
run_id
alanları üzerinde yineleme yapın. -
run_id
çağırmak için altRuns get output
değerlerini kullanın.
Koşular listesi
Tek görev biçimli işler için, bir iş işlemi için
Çoklu görev format işlevleri için boş bir tasks
dizisi döndürülür. Görevleri almak için run_id
'ı 'e geçirerek işi al çalıştırma işlemini (GET /jobs/runs/get
) başlatın. Aşağıda, çok görevli biçim işi için Runs list
API çağrısından örnek bir yanıt gösterilmektedir:
{
"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
}