Bagikan melalui


Mempertahankan data pekerjaan dan tugas ke Azure Storage dengan pustaka Konvensi File Batch untuk .NET

Tugas yang berjalan di Azure Batch dapat menghasilkan data output saat dijalankan. Data output tugas sering kali perlu disimpan untuk diambil oleh tugas lain dalam pekerjaan, aplikasi klien yang menjalankan pekerjaan, atau keduanya. Tugas menulis data output ke sistem file simpul komputasi Azure Batch, tetapi semua data pada simpul hilang saat digambar ulang atau saat simpul meninggalkan kumpulan. Tugas mungkin juga memiliki periode retensi file, setelah itu file yang dibuat oleh tugas akan dihapus. Karena alasan ini, penting untuk mempertahankan output tugas yang nantinya Anda perlukan ke penyimpanan data seperti Azure Storage.

Untuk opsi akun penyimpanan di Azure Batch, lihat Akun Azure Batch dan akun Azure Storage.

Anda dapat mempertahankan data tugas dari Azure Batch menggunakan pustaka Konvensi File untuk .NET. Pustaka Konvensi File menyederhanakan proses penyimpanan dan pengambilan data keluaran tugas di Azure Storage. Anda dapat menggunakan pustaka Konvensi File dalam kode tugas dan klien. Dalam mode tugas, gunakan pustaka untuk mempertahankan file. Dalam mode klien, gunakan pustaka untuk mencantumkan dan mengambil file. Kode tugas Anda juga dapat menggunakan pustaka untuk mengambil output tugas upstream, seperti dalam skenario dependensi tugas.

Untuk mengambil file keluaran dengan pustaka Konvensi File, temukan file untuk pekerjaan atau tugas. Anda tidak perlu mengetahui nama atau lokasi file. Sebagai gantinya, Anda dapat mencantumkan file berdasarkan ID dan tujuan. Misalnya, cantumkan semua file perantara untuk tugas tertentu. Atau, dapatkan file pratinjau untuk pekerjaan tertentu.

Dimulai dengan versi 2017-05-01, API layanan Batch mendukung data output yang bertahan ke Azure Storage untuk tugas dan tugas pengelola pekerjaan yang berjalan pada kumpulan yang dibuat dengan konfigurasi mesin virtual (VM). Anda dapat mempertahankan output dari dalam kode yang membuat tugas. Metode ini adalah alternatif untuk pustaka Konvensi File. Anda dapat mengubah aplikasi klien Batch untuk mempertahankan output tanpa perlu memperbarui aplikasi yang sedang dijalankan tugas Anda. Untuk informasi selengkapnya, lihat Pertahankan data tugas ke Azure Storage dengan API layanan Batch.

Kasus penggunaan pustaka

Azure Batch menyediakan beberapa cara untuk mempertahankan output tugas. Gunakan pustaka Konvensi File saat Anda ingin:

  • Mengubah kode untuk aplikasi yang menjalankan tugas Anda untuk menyimpan file.
  • Streaming data ke Azure Storage saat tugas masih berjalan.
  • Mempertahankan data dari kumpulan.
  • Menemukan dan mengunduh file output tugas berdasarkan ID atau tujuan di aplikasi klien Anda atau tugas lainnya.
  • Melihat output tugas di portal Azure.

Untuk skenario lain, Anda mungkin ingin mempertimbangkan pendekatan yang berbeda. Untuk informasi selengkapnya tentang opsi lain, lihat Meneruskan tugas dan output tugas ke Azure Storage.

Apa yang dimaksud dengan standar Konvensi File Batch?

Standar Konvensi File Batch menyediakan skema penamaan untuk kontainer tujuan dan jalur blob tempat file output Anda ditulis. File yang disimpan ke penyimpanan Azure yang mengikuti standar dapat dilihat secara otomatis di portal Azure.

Pustaka Konvensi File untuk .NET secara otomatis memberi nama kontainer penyimpanan dan file output tugas Anda sesuai dengan standar. Pustaka juga menyediakan metode untuk membuat kueri file output di Azure Storage. Anda dapat mengkueri berdasarkan ID pekerjaan, ID tugas, atau tujuan.

Jika mengembangkan dengan bahasa selain .NET, Anda dapat menerapkan sendiri standar Konvensi File dalam aplikasi Anda. Untuk informasi selengkapnya, lihat Menerapkan standar Konvensi File Batch.

Untuk mempertahankan data output ke Azure Storage menggunakan pustaka Konvensi File, pertama-tama tautkan akun Azure Storage ke akun Batch Anda.

  1. Masuk ke portal Azure.
  2. Cari dan pilih Batch di bilah pencarian.
  3. Pilih akun Batch untuk ditautkan dengan Azure Storage.
  4. Di halaman Akun Batch, di bawah Pengaturan, pilih Akun Storage.
  5. Jika Anda belum memiliki akun Azure Storage yang terkait dengan akun Batch Anda, pilih Akun Storage (Tidak Ada).
  6. Pilih akun Azure Storage yang akan digunakan. Untuk performa terbaik, gunakan akun di wilayah yang sama dengan akun Batch.

Pertahankan data output

Anda dapat mempertahankan data output pekerjaan dan tugas dengan pustaka Konvensi File. Pertama-tama, buat kontainer di Azure Storage. Kemudian, simpan output ke kontainer. Gunakan pustaka klien Azure Storage untuk .NET dalam kode tugas Anda untuk mengunggah output tugas ke kontainer.

Untuk informasi selengkapnya tentang bekerja dengan kontainer dan blob di Azure Storage, lihat Mulai menggunakan penyimpanan Azure Blob menggunakan .NET.

Semua output pekerjaan dan tugas yang bertahan dengan pustaka Konvensi File disimpan dalam kontainer yang sama. Jika sejumlah besar tugas mencoba untuk mempertahankan file pada saat yang sama, batas pembatasan Azure Storage mungkin diterapkan. Untuk informasi selengkapnya, lihat Daftar periksa performa dan skalabilitas untuk penyimpanan Blob.

Buat kontainer penyimpanan

Untuk mempertahankan output tugas ke Azure Storage, pertama-tama buat kontainer dengan memanggil CloudJob. PrepareOutputStorageAsync. Metode ekstensi ini mengambil objek CloudStorageAccount sebagai parameter. Metode ini membuat kontainer bernama sesuai dengan standar Konvensi File. Konten kontainer dapat ditemukan oleh portal Azure dan metode pengambilan yang dijelaskan dalam artikel ini.

Biasanya, buat kontainer di aplikasi klien Anda, yang membuat kumpulan, pekerjaan, dan tugas Anda. Contohnya:

CloudJob job = batchClient.JobOperations.CreateJob(
    "myJob",
    new PoolInformation { PoolId = "myPool" });

// Create reference to the linked Azure Storage account
CloudStorageAccount linkedStorageAccount =
    new CloudStorageAccount(myCredentials, true);

// Create the blob storage container for the outputs
await job.PrepareOutputStorageAsync(linkedStorageAccount);

Simpan output tugas

Setelah membuat kontainer penyimpanan Anda, tugas dapat menyimpan output ke kontainer menggunakan TaskOutputStorage. Kelas ini tersedia di pustaka Konvensi File.

Dalam kode tugas Anda, buat objek TaskOutputStorage. Saat tugas menyelesaikan pekerjaannya, panggil metode TaskOutputStorage.SaveAsync. Langkah ini menyimpan output ke Azure Storage.

CloudStorageAccount linkedStorageAccount = new CloudStorageAccount(myCredentials);
string jobId = Environment.GetEnvironmentVariable("AZ_BATCH_JOB_ID");
string taskId = Environment.GetEnvironmentVariable("AZ_BATCH_TASK_ID");

TaskOutputStorage taskOutputStorage = new TaskOutputStorage(
    linkedStorageAccount, jobId, taskId);

/* Code to process data and produce output file(s) */

await taskOutputStorage.SaveAsync(TaskOutputKind.TaskOutput, "frame_full_res.jpg");
await taskOutputStorage.SaveAsync(TaskOutputKind.TaskPreview, "frame_low_res.jpg");

kindParameter metode TaskOutputStorage.SaveAsync mengkategorikan file yang bertahan. Ada empat jenis TaskOutputKind yang telah ditentukan sebelumnya: TaskOutput, TaskPreview, TaskLog, dan TaskIntermediate. Anda juga dapat menentukan kategori output kustom.

Tentukan jenis output apa yang akan dicantumkan saat Anda mengkueri Batch nanti. Kemudian, saat membuat daftar output untuk suatu tugas, Anda dapat memfilter pada salah satu jenis output. Misalnya, filter ke "Beri saya output pratinjau untuk tugas 109." Untuk informasi selengkapnya, lihat Mengambil data output.

Jenis output juga menentukan tempat file output muncul di portal Azure. File dalam kategori TaskOutput berada di bawah File output tugas. File dalam kategori TaskLog berada di bawah Log tugas.

Simpan output pekerjaan

Anda juga dapat menyimpan output yang terkait dengan seluruh pekerjaan. Misalnya, dalam tugas penggabungan pekerjaan perenderan film, Anda dapat mempertahankan film yang dirender sepenuhnya sebagai output pekerjaan. Saat pekerjaan Anda selesai, aplikasi klien Anda dapat membuat daftar dan mengambil output untuk pekerjaan itu. Aplikasi klien Anda tidak perlu mengkueri tugas individual.

Simpan hasil pekerjaan dengan memanggil metode JobOutputStorage.SaveAsync. Tentukan JobOutputKind dan nama file. Contohnya:

CloudJob job = new JobOutputStorage(acct, jobId);
JobOutputStorage jobOutputStorage = job.OutputStorage(linkedStorageAccount);

await jobOutputStorage.SaveAsync(JobOutputKind.JobOutput, "mymovie.mp4");
await jobOutputStorage.SaveAsync(JobOutputKind.JobPreview, "mymovie_preview.mp4");

Seperti jenis TaskOutputKind untuk output tugas, gunakan jenis JobOutputKind untuk mengategorikan file pekerjaan yang bertahan. Nantinya, Anda dapat mencantumkan jenis output tertentu. Jenis JobOutputKind mencakup kategori output dan pratinjau. Jenis ini juga mendukung pembuatan kategori kustom.

Simpan log tugas

Anda mungkin juga perlu mempertahankan file yang diperbarui selama eksekusi tugas. Misalnya, Anda mungkin perlu mempertahankan file log, atau stdout.txt dan stderr.txt. Pustaka Konvensi File menyediakan metode TaskOutputStorage.SaveTrackedAsync untuk mempertahankan jenis file ini. Lacak pembaruan ke file pada node pada interval tertentu dengan SaveTrackedAsync. Kemudian, pertahankan pembaruan tersebut ke Azure Storage.

Contoh berikut menggunakan SaveTrackedAsync untuk memperbarui stdout.txt di Azure Storage setiap 15 detik selama pelaksanaan tugas:

TimeSpan stdoutFlushDelay = TimeSpan.FromSeconds(3);
string logFilePath = Path.Combine(
    Environment.GetEnvironmentVariable("AZ_BATCH_TASK_DIR"), "stdout.txt");

// The primary task logic is wrapped in a using statement that sends updates to
// the stdout.txt blob in Storage every 15 seconds while the task code runs.
using (ITrackedSaveOperation stdout =
        await taskStorage.SaveTrackedAsync(
        TaskOutputKind.TaskLog,
        logFilePath,
        "stdout.txt",
        TimeSpan.FromSeconds(15)))
{
    /* Code to process data and produce output file(s) */

    // We are tracking the disk file to save our standard output, but the
    // node agent may take up to 3 seconds to flush the stdout stream to
    // disk. So give the file a moment to catch up.
     await Task.Delay(stdoutFlushDelay);
}

Ganti bagian Code to process data and produce output file(s) yang dikomentari dengan kode apa pun yang biasanya dilakukan tugas Anda. Misalnya, Anda mungkin memiliki kode yang mengunduh data dari Azure Storage, lalu melakukan transformasi atau penghitungan. Anda dapat membungkus kode ini dalam blok using untuk memperbarui file secara berkala dengan SaveTrackedAsync.

Agen node adalah program yang berjalan pada setiap node di kumpulan. Program ini menyediakan antarmuka perintah dan kontrol antara node dan layanan Batch. Panggilan Task.Delay diperlukan di akhir blok using ini. Panggilan memastikan bahwa agen node memiliki waktu untuk membersihkan konten standar ke file stdout.txt pada node. Tanpa penundaan ini, mungkin saja melewatkan beberapa detik terakhir output. Anda mungkin tidak memerlukan penundaan ini untuk semua file.

Saat Anda mengaktifkan pelacakan file dengan SaveTrackedAsync, hanya penambahan ke file yang dilacak yang bertahan di Azure Storage. Hanya gunakan metode ini untuk melacak file log yang tidak berputar, atau file lain yang ditulis dengan operasi penambahan ke akhir file.

Ambil data output

Untuk mengambil file output untuk tugas atau pekerjaan tertentu, Anda tidak perlu mengetahui jalur di Azure Storage, atau nama file. Sebagai gantinya, Anda dapat meminta file output berdasarkan tugas atau ID pekerjaan.

Contoh kode berikut berulang melalui tugas pekerjaan. Selanjutnya, kode mencetak beberapa informasi tentang file output untuk tugas tersebut. Kemudian, kode mengunduh file dari AzureStorage.

foreach (CloudTask task in myJob.ListTasks())
{
    foreach (OutputFileReference output in
        task.OutputStorage(storageAccount).ListOutputs(
            TaskOutputKind.TaskOutput))
    {
        Console.WriteLine($"output file: {output.FilePath}");

        output.DownloadToFileAsync(
            $"{jobId}-{output.FilePath}",
            System.IO.FileMode.Create).Wait();
    }
}

Lihat file output di portal Azure

Jika file output tugas menggunakan standar Konvensi File Batch, Anda dapat melihat file di portal Azure.

Untuk mengaktifkan tampilan file output Anda di portal, Anda harus memenuhi persyaratan berikut:

Agar file output ditampilkan secara otomatis di portal Azure, Anda harus:

  1. Menautkan akun Azure Storage ke akun Batch Anda.
  2. Mematuhi konvensi penamaan yang telah ditentukan sebelumnya untuk kontainer dan file Azure Storage. Tinjau README untuk semua definisi. Jika Anda menggunakan pustaka Konvensi File untuk mempertahankan output, file Anda akan disimpan menurut standar Konvensi File.

Untuk melihat file output tugas dan log di portal Azure:

  1. Masuk ke portal Azure.
  2. Buka tugas yang ingin Anda lihat outputnya.
  3. Pilih File output tersimpan atau Log tersimpan.

Sampel kode

Proyek sampel PersistOutputs adalah salah satu sampel kode Azure Batch di GitHub. Solusi Visual Studio ini menunjukkan cara menggunakan pustaka Azure Batch File Conventions untuk mempertahankan output tugas ke penyimpanan yang tahan lama. Untuk menjalankan sampel ini, ikuti langkah-langkah berikut:

  1. Buka proyek di Visual Studio 2019.
  2. Tambahkan info masuk akun Batch dan Azure Storage Anda ke AccountSettings.settings di proyek Microsoft.Azure.Batch.Samples.Common.
  3. Bangun solusinya. Jangan jalankan solusi terlebih dahulu.
  4. Jika diminta, pulihkan paket NuGet apa pun.
  5. Unggah paket aplikasi untuk PersistOutputsTask melalui portal Azure.
    1. Sertakan PersistOutputsTask.exe yang dapat dijalankan dan rakitan dependennya dalam paket .zip.
    2. Atur ID aplikasi ke PersistOutputsTask.
    3. Atur versi paket aplikasi ke 1.0.
  6. Pilih Mulai untuk menjalankan proyek.
  7. Saat diminta untuk memilih teknologi persistensi yang akan digunakan, masukkan 1. Opsi ini menjalankan sampel menggunakan pustaka Konvensi File untuk mempertahankan output tugas.

Dapatkan pustaka Konvensi File Batch untuk .NET

Pustaka Konvensi File Batch untuk .NET tersedia di NuGet. Pustaka memperluas kelas CloudJob dan CloudTask dengan metode baru. Untuk informasi selengkapnya, lihat dokumentasi referensi pustaka Konvensi File.

Kode sumber pustaka Konvensi File tersedia di GitHub.

Langkah berikutnya