Tugas persiapan dan rilis pekerjaan pada simpul komputasi Batch

Pekerjaan Azure Batch sering memerlukan penyiapan sebelum tugasnya dijalankan, dan pemeliharaan pasca-pekerjaan ketika tugasnya selesai. Anda mungkin perlu mengunduh data input tugas umum ke simpul komputasi, atau mengunggah data output tugas ke Azure Storage setelah pekerjaan selesai. Anda dapat menggunakan tugas persiapan kerja dan pelepasan kerja untuk operasi ini.

  • Tugas persiapan kerja berjalan sebelum tugas pekerjaan, pada semua simpul komputasi yang dijadwalkan untuk menjalankan setidaknya satu tugas.
  • Tugas pelepasan kerja berjalan setelah pekerjaan selesai, pada setiap simpul di kumpulan yang menjalankan tugas persiapan kerja.

Seperti halnya tugas Batch lainnya, Anda dapat menentukan baris perintah yang akan dipanggil saat persiapan pekerjaan atau tugas rilis berjalan. Tugas persiapan dan rilis pekerjaan menawarkan fitur tugas Batch yang sudah dikenal seperti:

  • Unduhan file sumber daya.
  • Eksekusi yang ditingkatkan.
  • Variabel lingkungan kustom.
  • Durasi eksekusi maksimum.
  • Coba lagi hitungan.
  • Waktu retensi file.

Artikel ini memperlihatkan cara menggunakan kelas JobPreparationTask dan JobReleaseTask di pustaka Batch .NET .

Tip

Tugas persiapan dan pelepasan pekerjaan sangat membantu di lingkungan kumpulan bersama , di mana kumpulan simpul komputasi tetap ada di antara eksekusi pekerjaan dan digunakan oleh banyak pekerjaan.

Kasus penggunaan untuk tugas persiapan dan pelepasan pekerjaan

Tugas persiapan pekerjaan dan pelepasan kerja cocok untuk skenario berikut:

  • Unduh data tugas umum. Pekerjaan batch sering memerlukan sekumpulan data umum sebagai input untuk tugas pekerjaan. Anda dapat menggunakan tugas persiapan kerja untuk mengunduh data ini ke setiap simpul sebelum pelaksanaan tugas pekerjaan lainnya.

    Misalnya, dalam perhitungan analisis risiko harian, data pasar khusus pekerjaan namun umum untuk semua tugas dalam pekerjaan. Anda dapat menggunakan tugas persiapan kerja untuk mengunduh data pasar ini, yang sering berukuran beberapa gigabyte, ke setiap simpul komputasi sehingga tugas apa pun yang berjalan pada simpul dapat menggunakannya.

  • Hapus output pekerjaan dan tugas. Di lingkungan kumpulan bersama, di mana simpul komputasi kumpulan tidak dinonaktifkan di antara pekerjaan, Anda mungkin perlu menghapus data pekerjaan di antara eksekusi. Misalnya, Anda mungkin perlu menghemat ruang disk pada simpul, atau memenuhi kebijakan keamanan organisasi Anda. Anda dapat menggunakan tugas pelepasan kerja untuk menghapus data yang diunduh tugas persiapan kerja atau eksekusi tugas tersebut dihasilkan.

  • Pertahankan log. Anda mungkin ingin menyimpan salinan file log yang dihasilkan tugas Anda, atau file crash dump yang dihasilkan aplikasi yang gagal. Anda dapat menggunakan tugas rilis pekerjaan untuk memadatkan dan mengunggah data ini ke akun Azure Storage.

Tugas persiapan kerja

Sebelum menjalankan tugas pekerjaan, Batch menjalankan tugas persiapan pekerjaan pada setiap simpul komputasi yang dijadwalkan untuk menjalankan tugas. Secara default, Batch menunggu tugas persiapan pekerjaan selesai sebelum menjalankan tugas pekerjaan terjadwal, tetapi Anda dapat mengonfigurasinya untuk tidak menunggu.

Jika simpul dimulai ulang, tugas persiapan pekerjaan berjalan lagi, tetapi Anda juga dapat menonaktifkan perilaku ini. Jika Anda memiliki pekerjaan dengan tugas persiapan kerja dan tugas manajer pekerjaan, tugas persiapan kerja berjalan sebelum tugas manajer pekerjaan dan sebelum semua tugas lainnya. Tugas persiapan kerja selalu berjalan terlebih dahulu.

Tugas persiapan kerja hanya berjalan pada simpul yang dijadwalkan untuk menjalankan tugas. Perilaku ini mencegah eksekusi yang tidak perlu pada simpul yang tidak diberi tugas apa pun. Simpul mungkin tidak diberi tugas apa pun ketika jumlah tugas pekerjaan kurang dari jumlah simpul dalam kumpulan. Perilaku ini juga berlaku ketika eksekusi tugas bersamaan diaktifkan, yang membuat beberapa simpul menganggur jika jumlah tugas lebih rendah dari total kemungkinan tugas bersamaan.

Catatan

JobPreparationTask berbeda dari CloudPool.StartTask yang JobPreparationTask berjalan di awal setiap pekerjaan, sedangkan StartTask hanya berjalan saat simpul komputasi pertama kali bergabung dengan kumpulan atau memulai ulang.

Tugas pelepasan kerja

Setelah Anda menandai pekerjaan sebagai selesai, tugas rilis pekerjaan berjalan pada setiap simpul di kumpulan yang menjalankan tugas persiapan pekerjaan. Tandai pekerjaan sebagai selesai dengan mengeluarkan permintaan penghentian. Permintaan ini menetapkan status pekerjaan kemengakhiri, mengakhiri tugas aktif atau berjalan yang dikaitkan dengan pekerjaan, dan menjalankan tugas pelepasan kerja. Pekerjaan lalu pindah ke status selesai.

Catatan

Penghapusan pekerjaan juga menjalankan tugas pelepasan kerja. Namun, jika pekerjaan sudah dihentikan, tugas rilis tidak berjalan untuk kedua kalinya jika pekerjaan kemudian dihapus.

Tugas rilis pekerjaan dapat berjalan selama maksimal 15 menit sebelum layanan Batch mengakhirinya. Untuk informasi selengkapnya, lihat dokumentasi referensi REST API.

Tugas persiapan dan rilis pekerjaan dengan Batch .NET

Untuk menjalankan tugas persiapan kerja, tetapkan objek JobPreparationTask ke properti CloudJob.JobPreparationTask pekerjaan Anda. Demikian pula, mulai JobReleaseTask dan tetapkan ke properti CloudJob.JobReleaseTask pekerjaan Anda untuk mengatur tugas pelepasan kerja.

Dalam cuplikan kode berikut, myBatchClient adalah instans BatchClient, dan myPool merupakan kumpulan yang ada dalam akun Batch.

// 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();

Tugas rilis pekerjaan berjalan ketika pekerjaan dihentikan atau dihapus. Anda mengakhiri pekerjaan dengan menggunakan JobOperations.TerminateJobAsync, dan menghapus pekerjaan dengan menggunakan JobOperations.DeleteJobAsync. Anda biasanya mengakhiri atau menghapus pekerjaan saat tugasnya selesai, atau ketika batas waktu yang Anda tentukan tercapai.

// 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");

Sampel kode di GitHub

Untuk melihat tugas persiapan dan rilis pekerjaan dalam tindakan, buat dan jalankan proyek sampel JobPrepRelease dari GitHub. Aplikasi konsol ini mengambil tindakan berikut:

  1. Membuat kumpulan dengan dua simpul.
  2. Membuat pekerjaan dengan tugas persiapan dan pelepasan kerja standar.
  3. Menjalankan tugas persiapan pekerjaan, yang pertama kali menulis ID simpul ke file teks di direktori bersama simpul.
  4. Menjalankan tugas pada setiap simpul yang menulis ID tugasnya ke file teks yang sama.
  5. Setelah semua tugas selesai atau batas waktu tercapai, cetak konten file teks setiap simpul ke konsol.
  6. Menjalankan tugas pelepasan kerja untuk menghapus file dari simpul ketika pekerjaan selesai.
  7. Mencetak kode keluar dari tugas persiapan dan rilis pekerjaan untuk setiap simpul yang dijalankannya.
  8. Jeda eksekusi memungkinkan konfirmasi penghapusan pekerjaan dan/atau kumpulan.

Output dari aplikasi sampel mirip dengan contoh berikut:

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...

Catatan

Berbagai pembuatan dan waktu mulai simpul di kumpulan baru berarti beberapa simpul siap untuk tugas sebelum yang lain, sehingga Anda mungkin melihat output yang berbeda. Secara khusus, karena tugas selesai dengan cepat, salah satu simpul kumpulan mungkin menjalankan semua tugas pekerjaan. Jika ini terjadi, tugas persiapan dan rilis pekerjaan tidak ada untuk simpul yang tidak menjalankan tugas.

Melihat tugas persiapan dan rilis pekerjaan di portal Azure

Anda dapat menggunakan portal Azure untuk melihat properti dan tugas pekerjaan Batch, termasuk tugas persiapan dan rilis pekerjaan. Dari halaman akun Batch Anda, pilih Pekerjaan dari navigasi kiri lalu pilih pekerjaan. Jika Anda menjalankan aplikasi sampel, navigasikan ke halaman pekerjaan setelah tugas selesai, tetapi sebelum Anda menghapus pekerjaan dan kumpulan.

Anda dapat memantau kemajuan dan status pekerjaan dengan memperluas Perkiraan jumlah tugas pada halaman Gambaran Umum atau Tugas pekerjaan.

Cuplikan layar memperlihatkan kemajuan tugas pekerjaan di portal Azure.

Cuplikan layar berikut menunjukkan halaman JobPrepReleaseSampleJob setelah aplikasi sampel berjalan. Pekerjaan ini memiliki tugas persiapan dan rilis, sehingga Anda dapat memilih Tugas persiapan atau Tugas rilis di navigasi kiri untuk melihat propertinya.

Cuplikan layar memperlihatkan properti tugas pelepasan kerja di portal Azure.

Langkah berikutnya