İşler API 2.0'dan 2.1'e güncelleştirme
Artık Azure Databricks işleri ile birden çok görevi düzenleyebilirsiniz. Bu makalede, birden çok görevi olan işleri destekleyen İşler API'sinde yapılan değişiklikler ayrıntılı olarak anlatılarak mevcut API istemcilerinizi bu yeni özellikle çalışacak şekilde güncelleştirmenize yardımcı olacak yönergeler sağlanır.
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 tek görev biçimi olarak tanımlanan işleri ve birden çok görevle birden çok görev biçimi olarak tanımlanan işleri ifade eder.
İşler API'si 2.0 ve 2.1 artık güncelleştirme isteğini destekliyor. Tek görev biçimli update
işler ile çok görevli biçim işleri arasındaki değişiklikleri en aza indirmek için sıfırlama isteği yerine mevcut işi değiştirmek için isteği kullanın.
API değişiklikleri
İşler API'sinde artık bir TaskSettings
işteki her görevin ayarlarını yakalamak için bir nesne tanımlıyor. Çok görevli biçim işleri için, nesneye tasks
bir veri yapıları dizisi TaskSettings
olan alan eklenir JobSettings
. Daha önce öğesinin JobSettings
bir 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
alanı içerecek format
şekilde de güncelleştirilir. alanı format
işin biçimini gösterir ve veya MULTI_TASK
olarak ayarlanmış SINGLE_TASK
bir STRING
değerdir.
Ç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 çok görevli biçime uygun olmalıdır ve yanıtlar çok görevli biçimde yapılandırılır. İlk olarak API 2.1 için yeni özellikler kullanıma sunulur.
İş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:
- Görev tamamlandığında görev başlatıldığında ve sonlandırıldığında bir görev düzeyi kümesi oluşturulur ve başlatı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 nesnesine JobSettings
bir JobCluster
dizi 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, kitaplıkları task
alan ayarlarında 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örevin yapılandırmasındaki ingest_orders
alan bir 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 veri yapısı, JobSettings
alanın eklenmesi format
dışında değişmeden kalır. Dizi TaskSettings
dahil değildir ve görev ayarları veri yapısının en üst düzeyinde JobSettings
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 istemci 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
- Gönderme çalıştırmaları
- Güncelleştirme
- Sıfırla
- Liste
- Edinin
- Çalıştırmalar get
- Çalıştırmalar çıktıyı alır
- Çalıştırmalar listesi
Yaratmak
İşler API'sindeki Yeni iş oluşturma işlemi (POST /jobs/create
) aracılığıyla tek görev biçimli bir iş oluşturmak için mevcut istemcileri değiştirmeniz gerekmez.
Çok görevli biçimli bir iş oluşturmak için içindeki alanını JobSettings
kullanarak tasks
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
}
]
}
Gönderme çalıştırmaları
İşler API'sinde Bir kerelik çalıştırma işlemiPOST /runs/submit
() oluşturma ve tetikleme ile tek seferlik bir görev biçimi işi göndermek için, var olan istemcileri değiştirmeniz gerekmez.
Çok görevli biçimli bir işin tek seferlik çalışmasını göndermek için içindeki alanını JobSettings
kullanarak tasks
kümeler de dahil olmak üzere her görevin ayarlarını belirtin. İstek paylaşılan iş kümelerini desteklemediğinden runs submit
, çok görev biçimli bir iş gönderilirken kümeler görev düzeyinde ayarlanmalıdır. Birden çok görev belirtme örneği JobSettings
için bkz. Oluşturma.
Güncelleştirmek
İşler API'sindeki bir işi kısmen güncelleştirme işlemiyle (POST /jobs/update
) tek görev biçimli bir işi güncelleştirmek için mevcut istemcileri değiştirmeniz gerekmez.
Çok görevli biçim işinin ayarlarını güncelleştirmek için, yeni task
ayarları tanımlamak için benzersiz task_key
alanı kullanmanız gerekir. Birden çok görev belirtme örneği JobSettings
için bkz. Oluşturma.
Sıfırlama
İşler API'sindeki bir iş işleminin (POST /jobs/reset
) tüm ayarlarının üzerine yaz ile tek görev biçimli bir işin ayarlarının üzerine yazmak için var olan istemcileri değiştirmeniz gerekmez.
Çok görevli biçim işinin ayarlarının üzerine yazmak için bir veri yapısı dizisiyle TaskSettings
bir veri yapısı belirtinJobSettings
. Birden çok görev belirtme örneği JobSettings
için bkz. Oluşturma.
Tek görevden çok görevli biçime geçmeden tek tek alanları değiştirmek için Güncelleştir'i kullanın.
Liste
Tek görev biçimli işler için, İşler API'sindeki Tüm işleri listele işleminden (GET /jobs/list
) gelen yanıtı 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. İstemcileri, yapıda döndürülen çok görev biçimli bir işin küme veya görev ayarlarına erişecek Job
şekilde değiştirmek için:
- Çok görevli biçim işi için alanı ayrıştırın
job_id
. job_id
İş ayrıntılarını almak için öğesini İşler API'sindeki İş alma işlemine (GET /jobs/get
) geçirin. Çok görevli biçim işi için API çağrısındanGet
örnek yanıt için bkz. Alma.
Aşağıdaki örnekte tek görevli ve çok görevli biçim işleri 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"
}
]
}
Al
Tek görev biçimli işler için, İşler API'sindeki İş al işleminden (GET /jobs/get
) gelen yanıtı işlemek için istemci değişikliği gerekmez.
Çok görevli biçim işleri, görev ayarlarını içeren bir veri yapıları dizisi task
döndürür. Görev düzeyi ayrıntılarına erişmeniz gerekiyorsa, dizide tasks
yineleme yapmak ve gerekli alanları ayıklamak için istemcilerinizi değiştirmeniz gerekir.
Aşağıda, çok görevli biçim işi için API çağrısından Get
alınan ö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 get
Tek görev biçimli işler için, İşler API'sindeki İş çalıştırması alma işleminden (GET /jobs/runs/get
) gelen yanıtı işlemek için istemci değişikliği gerekmez.
Çok görevli biçimli bir iş çalıştırması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 görev için öğesini ayrıştırın
run_id
. - Her görevin çalıştırmasıyla ilgili ayrıntıları almak için ile Bir
run_id
çalıştırma işlemi (GET /jobs/runs/get-output
) için çıktıyı al'ı çağırı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 çıktıyı alır
Tek görev biçimli işler için İşler API'sindeki Çalıştırma işleminin (GET /jobs/runs/get-output
) çıktısını alma bölümünden gelen yanıtı işlemek için istemci değişikliği gerekmez.
Çok görevli biçim işleri için, bir üst çalıştırmada çağrılması Runs get output
, çalıştırma çıkışı yalnızca tek tek görevler için kullanılabilir olduğundan hatayla sonuçlanır. Çok görevli biçim işinin çıktısını ve meta verilerini almak için:
- Çalıştırma isteğinin çıkışını al'ı çağırın.
- Yanıttaki alt
run_id
alanlar üzerinde yineleme yapın. - çağırmak
Runs get output
için altrun_id
değerleri kullanın.
Çalıştırmalar listesi
Tek görev biçimli işler için, bir iş işlemi (GET /jobs/runs/list
) için Liste çalıştırmalarından gelen yanıtı işlemek için istemci değişikliği gerekmez.
Çok görevli biçim işleri için boş tasks
bir dizi döndürülür. run_id
Görevleri almak için öğesini İş çalıştırması alma işlemine (GET /jobs/runs/get
) geçirin. Aşağıda, çok görevli biçim işi için API çağrısından Runs list
ö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
}