Mulai cepat: Menggunakan .NET untuk membuat kumpulan Batch dan menjalankan pekerjaan

Mulai cepat ini menunjukkan kepada Anda cara memulai Azure Batch dengan menjalankan aplikasi C# yang menggunakan Azure Batch .NET API. Aplikasi .NET:

  • Mengunggah beberapa file data input ke kontainer blob Azure Storage untuk digunakan untuk pemrosesan tugas Batch.
  • Membuat kumpulan dua komputer virtual (VM), atau simpul komputasi, yang menjalankan Windows Server.
  • Membuat pekerjaan yang menjalankan tugas pada simpul untuk memproses setiap file input dengan menggunakan baris perintah Windows.
  • Menampilkan file output yang dikembalikan tugas.

Setelah Anda menyelesaikan mulai cepat ini, Anda memahami konsep utama layanan Batch dan siap menggunakan Batch dengan beban kerja skala yang lebih realistis dan lebih besar.

Prasyarat

Menjalankan aplikasi

Untuk menyelesaikan mulai cepat ini, Anda mengunduh atau mengkloning aplikasi, menyediakan nilai akun Anda, membangun dan menjalankan aplikasi, dan memverifikasi output.

Mengunduh atau mengkloning aplikasi

Unduh atau kloning aplikasi Mulai Cepat Azure Batch .NET dari GitHub. Gunakan perintah berikut untuk mengkloning repositori aplikasi dengan klien Git:

git clone https://github.com/Azure-Samples/batch-dotnet-quickstart.git

Berikan informasi akun Anda

Aplikasi ini perlu menggunakan nama akun Batch dan Storage, nilai kunci akun, dan titik akhir akun Batch Anda. Anda bisa mendapatkan informasi ini dari alat portal Azure, Azure API, atau baris perintah.

Untuk mendapatkan informasi akun Anda dari portal Azure:

  1. Dari bilah Pencarian Azure, cari dan pilih nama akun Batch Anda.
  2. Pada halaman akun Batch Anda, pilih Kunci dari navigasi kiri.
  3. Pada halaman Kunci , salin nilai berikut:
  • Akun batch
  • Titik akhir akun
  • Kunci akses utama
  • Nama akun penyimpanan
  • Key1

Navigasikan ke folder batch-dotnet-quickstart yang diunduh dan edit string kredensial di Program.cs untuk menyediakan nilai yang Anda salin:

// Batch account credentials
private const string BatchAccountName = "<batch account>";
private const string BatchAccountKey  = "<primary access key>";
private const string BatchAccountUrl  = "<account endpoint>";

// Storage account credentials
private const string StorageAccountName = "<storage account name>";
private const string StorageAccountKey  = "<key1>

Penting

Mengekspos kunci akun di sumber aplikasi tidak disarankan untuk penggunaan Produksi. Anda harus membatasi akses ke kredensial dan merujuknya dalam kode Anda dengan menggunakan variabel atau file konfigurasi. Yang terbaik adalah menyimpan kunci akun Batch dan Storage di Azure Key Vault.

Membuat dan menjalankan aplikasi dan melihat output

Untuk melihat alur kerja Batch dalam tindakan, buat dan jalankan aplikasi di Visual Studio. Anda juga dapat menggunakan baris dotnet build perintah dan dotnet run perintah.

Di Visual Studio:

  1. Buka file BatchDotNetQuickstart.sln, klik kanan solusi di Penjelajah Solusi, dan pilih Bangun. Jika diminta, gunakan NuGet Package Manager untuk memperbarui atau memulihkan paket NuGet.

  2. Setelah build selesai, pilih BatchDotNetQuickstart di bilah menu atas untuk menjalankan aplikasi.

Durasi umum dengan konfigurasi default adalah sekitar lima menit. Penyiapan simpul kumpulan awal membutuhkan waktu paling lama. Untuk menjalankan ulang pekerjaan, hapus pekerjaan dari eksekusi sebelumnya, tetapi jangan hapus kumpulan. Pada kumpulan yang telah dikonfigurasi, pekerjaan akan selesai dalam beberapa detik.

Aplikasi mengembalikan output yang mirip dengan contoh berikut:

Sample start: 11/16/2022 4:02:54 PM

Container [input] created.
Uploading file taskdata0.txt to container [input]...
Uploading file taskdata1.txt to container [input]...
Uploading file taskdata2.txt to container [input]...
Creating pool [DotNetQuickstartPool]...
Creating job [DotNetQuickstartJob]...
Adding 3 tasks to job [DotNetQuickstartJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...

Ada jeda saat Monitoring all tasks for 'Completed' state, timeout in 00:30:00... simpul komputasi kumpulan dimulai. Saat tugas dibuat, Batch mengantrekannya untuk dijalankan pada kumpulan. Segera setelah simpul komputasi pertama tersedia, tugas pertama berjalan pada simpul. Anda dapat memantau status simpul, tugas, dan pekerjaan dari halaman akun Batch Anda di portal Azure.

Setelah setiap tugas selesai, Anda akan melihat output yang mirip dengan contoh berikut:

Printing task output.
Task: Task0
Node: tvm-2850684224_3-20171205t000401z
Standard out:
Batch processing began with mainframe computers and punch cards. Today it still plays a central role...
stderr:
...

Mengulas kode

Tinjau kode untuk memahami langkah-langkah dalam Mulai Cepat Azure Batch .NET.

Membuat klien layanan dan mengunggah file sumber daya

  1. Untuk berinteraksi dengan akun penyimpanan, aplikasi menggunakan pustaka klien Azure Storage Blobs untuk .NET untuk membuat BlobServiceClient.

    var sharedKeyCredential = new StorageSharedKeyCredential(storageAccountName, storageAccountKey);
    string blobUri = "https://" + storageAccountName + ".blob.core.windows.net";
    
    var blobServiceClient = new BlobServiceClient(new Uri(blobUri), sharedKeyCredential);
    return blobServiceClient;
    
  2. Aplikasi ini menggunakan blobServiceClient referensi untuk membuat kontainer di akun penyimpanan dan mengunggah file data ke kontainer. File dalam penyimpanan didefinisikan sebagai objek ResourceFile Batch yang nantinya dapat diunduh Batch ke simpul komputasi.

    List<string> inputFilePaths = new()
    {
        "taskdata0.txt",
        "taskdata1.txt",
        "taskdata2.txt"
    };
    
    var inputFiles = new List<ResourceFile>();
    
    foreach (var filePath in inputFilePaths)
    {
        inputFiles.Add(UploadFileToContainer(containerClient, inputContainerName, filePath));
    }
    
  3. Aplikasi ini membuat objek BatchClient untuk membuat dan mengelola kumpulan Batch, pekerjaan, dan tugas. Klien Batch menggunakan autentikasi kunci bersama. Batch juga mendukung autentikasi Microsoft Entra.

    var cred = new BatchSharedKeyCredentials(BatchAccountUrl, BatchAccountName, BatchAccountKey);
    
     using BatchClient batchClient = BatchClient.Open(cred);
    ...
    

Membuat kumpulan simpul komputasi

Untuk membuat kumpulan Batch, aplikasi menggunakan metode BatchClient.PoolOperations.CreatePool untuk mengatur jumlah simpul, ukuran VM, dan konfigurasi kumpulan. Objek VirtualMachineConfiguration berikut menentukan ImageReference ke gambar Windows Server Marketplace. Batch mendukung berbagai gambar OS Windows Server dan Linux Marketplace, dan juga mendukung gambar VM kustom.

Ukuran PoolNodeCountPoolVMSize dan VM adalah konstanta yang ditentukan. Aplikasi ini membuat kumpulan dua simpul Standard_A1_v2. Ukuran ini menawarkan keseimbangan performa yang baik versus biaya untuk mulai cepat ini.

Metode Terapkan mengirimkan kumpulan ke layanan Batch.


private static VirtualMachineConfiguration CreateVirtualMachineConfiguration(ImageReference imageReference)
{
    return new VirtualMachineConfiguration(
        imageReference: imageReference,
        nodeAgentSkuId: "batch.node.windows amd64");
}

private static ImageReference CreateImageReference()
{
    return new ImageReference(
        publisher: "MicrosoftWindowsServer",
        offer: "WindowsServer",
        sku: "2016-datacenter-smalldisk",
        version: "latest");
}

private static void CreateBatchPool(BatchClient batchClient, VirtualMachineConfiguration vmConfiguration)
{
    try
    {
        CloudPool pool = batchClient.PoolOperations.CreatePool(
            poolId: PoolId,
            targetDedicatedComputeNodes: PoolNodeCount,
            virtualMachineSize: PoolVMSize,
            virtualMachineConfiguration: vmConfiguration);

        pool.Commit();
    }
...

Membuat pekerjaan Batch

Pekerjaan Batch adalah pengelompokan logis untuk satu atau lebih tugas. Pekerjaan ini mencakup pengaturan yang umum untuk tugas, seperti prioritas dan kumpulan untuk menjalankan tugas.

Aplikasi ini menggunakan metode BatchClient.JobOperations.CreateJob untuk membuat pekerjaan di kumpulan Anda. Metode Terapkan mengirimkan kumpulan ke layanan Batch. Awalnya pekerjaan tersebut tidak memiliki tugas.

try
{
    CloudJob job = batchClient.JobOperations.CreateJob();
    job.Id = JobId;
    job.PoolInformation = new PoolInformation { PoolId = PoolId };

    job.Commit();
}
...

Buat tugas

Batch menyediakan sejumlah cara untuk menyebarkan aplikasi dan skrip ke node komputasi. Aplikasi ini membuat daftar objek input ResourceFile CloudTask. Setiap tugas memproses file input dengan menggunakan properti CommandLine . Baris perintah Batch adalah tempat Anda menentukan aplikasi atau skrip Anda.

Baris perintah dalam kode berikut menjalankan perintah Windows type untuk menampilkan file input. Kemudian, aplikasi menambahkan setiap tugas ke pekerjaan dengan metode AddTask , yang mengantrekan tugas untuk dijalankan pada simpul komputasi.

for (int i = 0; i < inputFiles.Count; i++)
{
    string taskId = String.Format("Task{0}", i);
    string inputFilename = inputFiles[i].FilePath;
    string taskCommandLine = String.Format("cmd /c type {0}", inputFilename);

    var task = new CloudTask(taskId, taskCommandLine)
    {
        ResourceFiles = new List<ResourceFile> { inputFiles[i] }
    };
    tasks.Add(task);
}

batchClient.JobOperations.AddTask(JobId, tasks);

Melihat output tugas

Aplikasi ini membuat TaskStateMonitor untuk memantau tugas dan memastikan tugas selesai. Ketika setiap tugas berhasil dijalankan, outputnya menulis ke stdout.txt. Aplikasi kemudian menggunakan properti CloudTask.ComputeNodeInformation untuk menampilkan file stdout.txt untuk setiap tugas yang diselesaikan.

foreach (CloudTask task in completedtasks)
{
    string nodeId = String.Format(task.ComputeNodeInformation.ComputeNodeId);
    Console.WriteLine("Task: {0}", task.Id);
    Console.WriteLine("Node: {0}", nodeId);
    Console.WriteLine("Standard out:");
    Console.WriteLine(task.GetNodeFile(Constants.StandardOutFileName).ReadAsString());
}

Membersihkan sumber daya

Aplikasi secara otomatis menghapus kontainer penyimpanan yang dibuatnya, dan memberi Anda opsi untuk menghapus kumpulan dan pekerjaan Batch. Kumpulan dan simpul dikenakan biaya saat simpul berjalan, bahkan jika mereka tidak menjalankan pekerjaan. Jika Anda tidak lagi memerlukan kumpulan, hapus kumpulan tersebut.

Saat Anda tidak lagi memerlukan akun Batch dan akun penyimpanan, Anda dapat menghapus grup sumber daya yang berisinya. Di portal Azure, pilih Hapus grup sumber daya di bagian atas halaman grup sumber daya. Pada layar Hapus grup sumber daya, masukkan nama grup sumber daya, lalu pilih Hapus.

Langkah berikutnya

Dalam mulai cepat ini, Anda menjalankan aplikasi yang menggunakan Batch .NET API untuk membuat kumpulan Batch, simpul, pekerjaan, dan tugas. Pekerjaan mengunggah file sumber daya ke kontainer penyimpanan, menjalankan tugas pada simpul, dan menampilkan output dari simpul.

Sekarang setelah Anda memahami konsep utama layanan Batch, Anda siap untuk menggunakan Batch dengan beban kerja skala yang lebih realistis dan lebih besar. Untuk mempelajari selengkapnya tentang Azure Batch dan menelusuri beban kerja paralel dengan aplikasi dunia nyata, lanjutkan ke tutorial Batch .NET.