Batch işlem düğümlerinde iş hazırlama ve bırakma görevleri

bir Azure Batch işi genellikle görevleri yürütülmeden önce kurulumu ve görevleri tamamlandığında iş sonrası bakımı gerektirir. Örneğin, ortak görev giriş verilerini işlem düğümlerinize indirmeniz veya iş tamamlandıktan sonra görev çıktı verilerini Azure Depolama'ya yüklemeniz gerekebilir. Bu işlemler için iş hazırlama ve iş bırakma görevlerini kullanabilirsiniz.

  • İş hazırlama görevi, işin görevlerinden önce, en az bir görevi çalıştırmak üzere zamanlanmış tüm işlem düğümlerinde çalışır.
  • bir iş bırakma görevi, iş tamamlandıktan sonra, havuzdaki bir iş hazırlama görevini çalıştıran her düğümde çalışır.

Diğer Batch görevlerde olduğu gibi, bir iş hazırlama veya bırakma görevi çalıştırıldığında çağrılacak bir komut satırı belirtebilirsiniz. İş hazırlama ve bırakma görevleri, aşağıdakiler gibi tanıdık Batch görev özellikleri sunar:

  • Kaynak dosyası indirme.
  • Yükseltilmiş yürütme.
  • Özel ortam değişkenleri.
  • En uzun yürütme süresi.
  • Yeniden deneme sayısı.
  • Dosya saklama süresi.

Bu makalede, Batch .NET kitaplığında JobPreparationTask ve JobReleaseTask sınıflarının nasıl kullanılacağı gösterilmektedir.

İpucu

İş hazırlama ve bırakma görevleri, özellikle bir işlem düğümleri havuzunun iş çalıştırmaları arasında kalıcı olduğu ve birçok iş tarafından kullanıldığı paylaşılan havuz ortamlarında yararlıdır.

İş hazırlama ve bırakma görevleri için kullanım örnekleri

İş hazırlama ve iş bırakma görevleri aşağıdaki senaryolar için uygundur:

  • Ortak görev verilerini indirme. Toplu işler genellikle işin görevleri için giriş olarak ortak bir veri kümesi gerektirir. İşin diğer görevlerini yürütmeden önce bu verileri her düğüme indirmek için bir iş hazırlama görevi kullanabilirsiniz.

    Örneğin, günlük risk analizi hesaplamalarında pazar verileri işe özgüdür ancak işteki tüm görevler için ortaktır. Genellikle birkaç gigabayt boyutunda olan bu pazar verilerini her işlem düğümüne indirmek için bir iş hazırlama görevi kullanabilirsiniz, böylece düğümde çalışan herhangi bir görev bunu kullanabilir.

  • İşi ve görev çıkışını silin. Bir havuzun işlem düğümlerinin işler arasında kullanımdan kaldırılmadığı paylaşılan havuz ortamında, çalıştırmalar arasında iş verilerini silmeniz gerekebilir. Örneğin, düğümlerde disk alanından tasarruf etmeniz veya kuruluşunuzun güvenlik ilkelerini karşılamanız gerekebilir. bir iş hazırlama görevinin indirdiğiniz veya bu görev yürütmenin oluşturduğu verileri silmek için bir iş bırakma görevi kullanabilirsiniz.

  • Günlükleri tutun. Görevlerinizin oluşturduğu günlük dosyalarının bir kopyasını veya başarısız uygulamaların oluşturduğu kilitlenme bilgi dökümü dosyalarını saklamak isteyebilirsiniz. Bu verileri sıkıştırmak ve bir Azure Depolama hesabına yüklemek için bir iş bırakma görevi kullanabilirsiniz.

İş hazırlama görevi

Batch, iş görevlerini çalıştırmadan önce, bir görevi çalıştırmak için zamanlanmış her işlem düğümünde iş hazırlama görevini çalıştırır. Varsayılan olarak Batch, zamanlanmış iş görevlerini çalıştırmadan önce iş hazırlama görevinin tamamlanmasını bekler, ancak beklememesi için yapılandırabilirsiniz.

Düğüm yeniden başlatılırsa, iş hazırlama görevi yeniden çalışır, ancak bu davranışı da devre dışı bırakabilirsiniz. İş hazırlama görevi ve iş yöneticisi görevi olan bir işiniz varsa, iş hazırlama görevi iş yöneticisi görevinden önce ve diğer tüm görevlerde çalışır. İş hazırlama görevi her zaman önce çalışır.

İş hazırlama görevi yalnızca bir görevi çalıştırmak için zamanlanmış düğümlerde çalışır. Bu davranış, herhangi bir görev atanmamış düğümlerde gereksiz çalıştırmaları önler. İş görevlerinin sayısı havuzdaki düğüm sayısından az olduğunda düğümlere görev atanamayabilir. Bu davranış, eşzamanlı görev yürütme etkinleştirildiğinde de geçerlidir; bu da görev sayısı olası toplam eş zamanlı görevden düşükse bazı düğümleri boşta bırakır.

Not

JobPreparationTask , her işin başında çalışan CloudPool.StartTaskJobPreparationTask dosyasından farklıdır, StartTask ancak yalnızca bir işlem düğümü bir havuza ilk kez katıldığında veya yeniden başlatıldığında çalışır.

İş bırakma görevi

Bir işi tamamlandı olarak işaretledikten sonra, iş bırakma görevi havuzdaki bir iş hazırlama görevini çalıştıran her düğümde çalışır. Sonlandırma isteği vererek işi tamamlandı olarak işaretlersiniz. Bu istek, iş durumunu sonlandıracak şekilde ayarlar, işle ilişkili etkin veya çalışan görevleri sonlandırır ve iş bırakma görevini çalıştırır. Ardından iş tamamlanmış duruma geçer.

Not

Bir işin silinmesi, iş bırakma görevini de yürütür. Ancak, bir iş zaten sonlandırıldıysa, iş daha sonra silinirse yayın görevi ikinci kez çalışmaz.

İş bırakma görevleri, Batch hizmeti onları sonlandırmadan önce en fazla 15 dakika çalıştırılabilir. Daha fazla bilgi için REST API başvuru belgelerine bakın.

Batch .NET ile iş hazırlama ve bırakma görevleri

İş hazırlama görevini çalıştırmak için, işinizin CloudJob.JobPreparationTask özelliğine jobPreparationTask nesnesi atayın. Benzer şekilde, bir iş bırakma görevi kullanmak için bir JobReleaseTask başlatın ve bunu işinizin CloudJob.JobReleaseTask öğesine atayın.

Aşağıdaki kod parçacığında BatchClientmyBatchClient örneğidir ve myPool Batch hesabı içinde var olan bir havuzdur.

// Create the CloudJob for CloudPool "myPool"
CloudJob myJob =
    myBatchClient.JobOperations.CreateJob(
        "JobPrepReleaseSampleJob",
        new PoolInformation() { PoolId = "myPool" });

// Specify the command lines for the job preparation and release tasks
string jobPrepCmdLine =
    "cmd /c echo %AZ_BATCH_NODE_ID% > %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";
string jobReleaseCmdLine =
    "cmd /c del %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";

// Assign the job preparation task to the job
myJob.JobPreparationTask =
    new JobPreparationTask { CommandLine = jobPrepCmdLine };

// Assign the job release task to the job
myJob.JobReleaseTask =
    new JobReleaseTask { CommandLine = jobReleaseCmdLine };

await myJob.CommitAsync();

bir iş sonlandırıldığında veya silindiğinde iş bırakma görevi çalışır. JobOperations.TerminateJobAsync kullanarak bir işi sonlandırır ve JobOperations.DeleteJobAsync kullanarak bir işi silersiniz. Genellikle görevleri tamamlandığında veya tanımladığınız bir zaman aşımına ulaşıldığında işi sonlandırır veya silersiniz.

// Terminate the job to mark it as completed. Terminate initiates the
// job release task on any node that ran job tasks. Note that the
// job release task also runs when a job is deleted, so you don't
// have to call Terminate if you delete jobs after task completion.

await myBatchClient.JobOperations.TerminateJobAsync("JobPrepReleaseSampleJob");

GitHub'da kod örneği

İş hazırlama ve yayın görevlerinin nasıl çalıştığını görmek için GitHub'dan JobPrepRelease örnek projesini derleyin ve çalıştırın. Bu konsol uygulaması aşağıdaki eylemleri gerçekleştirir:

  1. İki düğümlü bir havuz oluşturur.
  2. İş hazırlama, sürüm ve standart görevlerle bir iş oluşturur.
  3. İlk olarak düğüm kimliğini düğümün paylaşılan dizinindeki bir metin dosyasına yazan iş hazırlama görevini çalıştırır.
  4. Görev kimliğini aynı metin dosyasına yazan her düğümde bir görev çalıştırır.
  5. Tüm görevler tamamlandıktan veya zaman aşımına ulaşıldıktan sonra, her düğümün metin dosyasının içeriğini konsola yazdırır.
  6. İş tamamlandığında dosyayı düğümden silmek için iş serbest bırakma görevini çalıştırır.
  7. Üzerinde çalıştırdıkları her düğüm için iş hazırlama ve bırakma görevlerinin çıkış kodlarını yazdırır.
  8. İşin ve/veya havuzun silinmesinin onaylanmasına izin vermek için yürütmeyi duraklatır.

Örnek uygulamanın çıktısı aşağıdaki örneğe benzer:

Attempting to create pool: JobPrepReleaseSamplePool
Created pool JobPrepReleaseSamplePool with 2 nodes
Checking for existing job JobPrepReleaseSampleJob...
Job JobPrepReleaseSampleJob not found, creating...
Submitting tasks and awaiting completion...
All tasks completed.

Contents of shared\job_prep_and_release.txt on tvm-2434664350_1-20160623t173951z:
-------------------------------------------
tvm-2434664350_1-20160623t173951z tasks:
  task001
  task004
  task005
  task006

Contents of shared\job_prep_and_release.txt on tvm-2434664350_2-20160623t173951z:
-------------------------------------------
tvm-2434664350_2-20160623t173951z tasks:
  task008
  task002
  task003
  task007

Waiting for job JobPrepReleaseSampleJob to reach state Completed
...

tvm-2434664350_1-20160623t173951z:
  Prep task exit code:    0
  Release task exit code: 0

tvm-2434664350_2-20160623t173951z:
  Prep task exit code:    0
  Release task exit code: 0

Delete job? [yes] no
yes
Delete pool? [yes] no
yes

Sample complete, hit ENTER to exit...

Not

Yeni bir havuzdaki düğümlerin değişen oluşturma ve başlangıç zamanları, bazı düğümlerin diğerlerinden önce görevler için hazır olduğu anlamına gelir, bu nedenle farklı bir çıkış görebilirsiniz. Özellikle, görevler hızlı bir şekilde tamamlandığı için havuzun düğümlerinden biri işin tüm görevlerini çalıştırabilir. Bu durumda, görev çalıştıran düğüm için iş hazırlama ve bırakma görevleri yoktur.

Azure portal iş hazırlama ve bırakma görevlerini görüntüleme

İş hazırlama ve bırakma görevleri de dahil olmak üzere Batch işi özelliklerini ve görevlerini görüntülemek için Azure portal kullanabilirsiniz. Batch hesabı sayfanızdan sol gezinti bölmesinden İşler'i seçin ve ardından bir iş seçin. Örnek uygulamayı çalıştırırsanız, görevler tamamlandıktan sonra ancak işi ve havuzu silmeden önce iş sayfasına gidin.

İşe Genel Bakış veya Görevler sayfasında Yaklaşık görev sayısı'nı genişleterek işin ilerleme durumunu ve durumunu izleyebilirsiniz.

Azure portal iş görevi ilerleme durumunu gösteren ekran görüntüsü.

Aşağıdaki ekran görüntüsünde, örnek uygulama çalıştırıldıktan sonra JobPrepReleaseSampleJob sayfası gösterilmektedir. Bu işin hazırlık ve yayın görevleri vardı, bu nedenle özelliklerini görmek için sol gezinti bölmesinde Hazırlık görevleri'ni veya Yayın görevleri'ni seçebilirsiniz.

Azure portal iş bırakma görevi özelliklerini gösteren ekran görüntüsü.

Sonraki adımlar