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

Panduan memulai cepat ini menunjukkan kepada Anda cara untuk 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 tugas yang menjalankan proses pada simpul untuk memproses setiap file input dengan menggunakan perintah command line Windows.
  • Menampilkan file output yang tugas kembalikan.

Setelah Anda menyelesaikan panduan awal ini, Anda memahami konsep utama layanan Batch dan siap menggunakan Batch dengan beban kerja yang lebih realistis dan berskala lebih besar.

Prasyarat

Menjalankan aplikasi

Untuk menyelesaikan panduan cepat ini, Anda mengunduh atau mengkloning aplikasi, memasukkan data 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 portal Microsoft Azure, API Azure, atau alat baris perintah.

Untuk mendapatkan informasi akun Anda dari portal Microsoft Azure:

  1. Dari bilah Pencarian Azure, cari dan pilih nama akun Batch Anda.
  • Akun Kumpulan
  • Titik akhir akun
  • Nama akun penyimpanan
  • ID Langganan
  • Nama grup sumber daya

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

// Batch account credentials
const string BatchAccountName = "<batch account>";
const string BatchAccountUrl  = "<account endpoint>";

// Azure Resource Manager credentials for the Batch account
const string SubscriptionId    = "<subscription ID>";
const string ResourceGroupName = "<resource group name>";

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

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 perintah baris dotnet build dan dotnet run.

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 node kumpulan awal memakan waktu paling banyak. Untuk menjalankan ulang tugas, hapus tugas dari proses sebelumnya, tetapi jangan hapus pool. Pada kumpulan yang telah dikonfigurasi sebelumnya, pekerjaan 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 sejenak di Monitoring all tasks for 'Completed' state, timeout in 00:30:00... saat simpul-simpul komputasi dari kumpulan mulai menyala. 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 Microsoft 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:
...

Meninjau kode

Tinjau kode untuk memahami tahapan dalam Azure Batch .NET Quickstart.

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.

    string blobUri = "https://" + storageAccountName + ".blob.core.windows.net";
    
    var blobServiceClient = new BlobServiceClient(new Uri(blobUri), new DefaultAzureCredential());
    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 dari Azure. Pustaka compute.Batch untuk membuat dan mengelola pekerjaan dan tugas Batch. Klien Batch menggunakan autentikasi Microsoft Entra.

    BatchClient batchClient = new BatchClient(new Uri(BatchAccountUrl), new DefaultAzureCredential());
    ...
    
  4. Aplikasi ini juga menggunakan pustaka Azure.ResourceManager.Batch untuk mengelola akun Batch dan pool-nya. Ini membuat ArmClient dan mendapatkan referensi BatchAccountResource untuk akun Batch dengan menggunakan ID langganan, nama grup sumber daya, dan nama akun Batch.

    ArmClient armClient = new ArmClient(new DefaultAzureCredential());
    
    ResourceIdentifier batchAccountIdentifier = BatchAccountResource.CreateResourceIdentifier(
        SubscriptionId,
        ResourceGroupName,
        BatchAccountName);
    
    BatchAccountResource batchAccount = armClient.GetBatchAccountResource(batchAccountIdentifier);
    

Membuat kumpulan simpul komputasi

Untuk membuat kumpulan Batch, aplikasi menggunakan metode BatchAccountPoolCollection.CreateOrUpdateAsync untuk mengatur jumlah simpul, ukuran VM, dan konfigurasi kumpulan. Objek BatchVmConfiguration berikut menentukan BatchImageReference ke gambar Marketplace Windows Server. Batch mendukung berbagai gambar OS Windows Server dan Linux Marketplace, dan juga mendukung gambar VM kustom.

PoolNodeCount dan ukuran VM PoolVMSize adalah konstanta yang ditentukan. Aplikasi ini membuat kumpulan dua simpul Standard_A1_v2. Ukuran ini menawarkan keseimbangan performa yang baik dibandingkan dengan biaya untuk panduan memulai cepat ini.

BatchImageReference imageReference = new BatchImageReference()
{
    Publisher = "MicrosoftWindowsServer",
    Offer = "WindowsServer",
    Sku = "2016-datacenter-smalldisk",
    Version = "latest"
};

BatchVmConfiguration vmConfiguration = new BatchVmConfiguration(
    imageReference: imageReference,
    nodeAgentSkuId: "batch.node.windows amd64");

BatchAccountPoolData poolData = new BatchAccountPoolData()
{
    VmSize = PoolVMSize,
    DeploymentConfiguration = new BatchDeploymentConfiguration() { VmConfiguration = vmConfiguration },
    ScaleSettings = new BatchAccountPoolScaleSettings()
    {
        FixedScale = new BatchAccountFixedScaleSettings() { TargetDedicatedNodes = PoolNodeCount }
    }
};

await batchAccount.GetBatchAccountPools().CreateOrUpdateAsync(WaitUntil.Completed, PoolId, poolData);

Membuat tugas Batch

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

Aplikasi ini menggunakan BatchClient.CreateJobAsync untuk membuat tugas pada kumpulan Anda. Awalnya pekerjaan tidak memiliki tugas.

BatchJobCreateOptions job = new BatchJobCreateOptions(JobId, new BatchPoolInfo() { PoolId = PoolId });
await batchClient.CreateJobAsync(job);

Membuat tugas

Batch menyediakan sejumlah cara untuk menyebarkan aplikasi dan skrip ke node komputasi. Aplikasi ini membuat daftar objek input ResourceFile. 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 tugas ke pekerjaan dengan BatchClient.CreateTasksAsync, 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);

    BatchTaskCreateOptions task = new BatchTaskCreateOptions(taskId, taskCommandLine)
    {
        ResourceFiles = { inputFiles[i] }
    };
    tasks.Add(task);
}

await batchClient.CreateTasksAsync(JobId, tasks);

Melihat output tugas

Aplikasi menunggu tugas selesai. Ketika setiap tugas berhasil dijalankan, outputnya menulis ke stdout.txt. Aplikasi kemudian menggunakan properti BatchTask.NodeInfo untuk menampilkan file stdout.txt untuk setiap tugas yang diselesaikan.

await foreach (BatchTask task in batchClient.GetTasksAsync(JobId))
{
    string nodeId = task.NodeInfo?.NodeId ?? "<unknown>";
    Console.WriteLine("Task: {0}", task.Id);
    Console.WriteLine("Node: {0}", nodeId);
    Console.WriteLine("Standard out:");
    BinaryData stdout = await batchClient.GetTaskFileAsync(JobId, task.Id, "stdout.txt");
    Console.WriteLine(stdout.ToString());
}

Membersihkan sumber daya

Aplikasi ini secara otomatis menghapus kontainer penyimpanan yang dibuatnya, dan memberi Anda opsi untuk menghapus kumpulan Batch dan pekerjaan. Kumpulan dan simpul dikenakan biaya selama simpul aktif, meskipun tidak ada pekerjaan yang dijalankan. 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 Microsoft 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 panduan memulai cepat ini, Anda menjalankan aplikasi yang menggunakan API Batch .NET 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.