Aracılığıyla paylaş


Batch işlem düğümlerinde iş hazırlama ve yayınlama görevleri

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.

  • Bir iş hazırlama görevi, en az bir görevin çalıştırılacağı şekilde zamanlanmış tüm işlem düğümlerinde, işin görevlerinden önce çalışır.
  • İş bırakma görevi, iş tamamlandıktan sonra, bir iş hazırlama görevi çalıştıran havuzdaki her bir düğümde yürütülü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.
  • Maksimum 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.

Tavsiye

İş hazırlama ve sürüm görevleri, özellikle bir hesaplama 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 indirin. Toplu işler genellikle bir işin görevleri için giriş olarak ortak bir veri kümesi gerektirir. İşin diğer görevleri yürütülmeden ö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 düğümde çalışan tüm görevlerin kullanabilmesi için her işlem düğümüne indirmek için bir iş hazırlama görevi kullanabilirsiniz.

  • İşlem 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ş bırakma görevi, bir iş hazırlama görevi tarafından indirilen veya görev yürütmesi sırasında oluşturulan verileri silmek için kullanılabilir.

  • 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 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ş yayın görevi kullanabilirsiniz.

İş hazırlama görevi

Batch, iş görevlerini çalıştırmadan önce, bir görevi çalıştırmak üzere zamanlanan 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 beklememek üzere yapılandırabilirsiniz.

Düğüm yeniden başlatılırsa, iş hazırlama görevi yeniden çalışır, ancak bu davranışı da engelleyebilirsiniz. İş 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 ve diğer tüm görevlerden önce çalışır. İş hazırlama görevi her zaman önce çalışır.

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

Uyarı

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

İş serbest bırakma görevi

Bir işi tamamlandı olarak işaretledikten sonra, görev bırakma işlemi, iş hazırlama görevi çalıştırılmış olan havuzdaki her düğümde çalışır. Sonlandırma isteği vererek bir 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.

Uyarı

Bir işin silinmesi, görev bırakma işlemini 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.

Görev bırakma işlemleri, Batch hizmeti tarafından sonlandırılana kadar 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ırlık ve teslim 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'sine atayın.

Aşağıdaki kod parçacığında myBatchClient örneğidir ve myPool Batch hesabı içinde mevcut 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 işi sonlandırıp JobOperations.DeleteJobAsync kullanarak bir işi silebilirsiniz. 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ırlığı, sürüm yayımlama ve standart görevler içeren bir iş oluşturur.
  3. İlk olarak düğümün paylaşılan dizinindeki bir metin dosyasına düğüm kimliğini yazan iş hazırlama görevini çalıştırır.
  4. Her düğümde, görev kimliğini aynı metin dosyasına yazan bir görev çalıştırılı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. İş ve/veya havuz silme onayı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...

Uyarı

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ığından, havuzdaki düğümlerden biri işin tüm görevlerini yürütebilir. Bu durumda, hiçbir görev çalıştırmayan düğüm için iş hazırlama ve serbest bırakma görevleri mevcut değildir.

Azure portalında iş hazırlama ve sürüm görevlerini görüntüleme

İş hazırlama ve yayın görevleri dahil olmak üzere Batch iş özelliklerini ve görevlerini görüntülemek için Azure portalını 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ş ilerleme durumunu ve durumunu izleyebilirsiniz.

Azure portalında 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 gezintide Hazırlık görevleri'ni veya Yayın görevleri'ni seçebilirsiniz.

Azure portalında iş sürümü görev özelliklerini gösteren ekran görüntüsü.

Sonraki Adımlar