Hızlı Başlangıç: Batch havuzu oluşturmak ve bir iş çalıştırmak için .NET kullanma

Bu hızlı başlangıçta, Azure Batch .NET API'sini kullanan bir C# uygulamasını çalıştırarak Azure Batch'i kullanmaya başlama adımları gösterilmektedir. .NET uygulaması:

  • Batch görev işleme için kullanmak üzere bir Azure Depolama blob kapsayıcısına birkaç giriş veri dosyası yükler.
  • Windows Server çalıştıran iki sanal makineden (VM) veya işlem düğümünden oluşan bir havuz oluşturur.
  • Bir Windows komut satırı kullanarak her giriş dosyasını işlemek için düğümlerde görevler çalıştıran bir iş oluşturur.
  • Görevlerin döndüreceği çıkış dosyalarını görüntüler.

Bu hızlı başlangıcı tamamladıktan sonra Batch hizmetinin temel kavramlarını anlarsınız ve Batch'i daha gerçekçi ve daha büyük ölçekli iş yükleriyle kullanmaya hazır olursunuz.

Ön koşullar

Uygulamayı çalıştırma

Bu hızlı başlangıcı tamamlamak için uygulamayı indirir veya kopyalar, hesap değerlerinizi sağlar, uygulamayı derleyip çalıştırır ve çıkışı doğrularsınız.

Uygulamayı indirme veya kopyalama

GitHub'dan Azure Batch .NET Hızlı Başlangıç uygulamasını indirin veya kopyalayın. Uygulama deposunu bir Git istemcisiyle kopyalamak için aşağıdaki komutu kullanın:

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

Hesap bilgilerinizi sağlayın

Uygulamanın Batch ve Depolama hesap adlarınızı, hesap anahtarı değerlerinizi ve Batch hesabı uç noktanızı kullanması gerekir. Bu bilgileri Azure portalından, Azure API'lerinden veya komut satırı araçlarından alabilirsiniz.

Hesap bilgilerinizi Azure portalından almak için:

  1. Azure Search çubuğunda Batch hesabınızın adını arayın ve seçin.
  2. Batch hesabı sayfanızda sol gezinti bölmesinden Anahtarlar'ı seçin.
  3. Anahtarlar sayfasında aşağıdaki değerleri kopyalayın:
  • Batch hesabı
  • Hesap uç noktası
  • Birincil erişim anahtarı
  • Depolama hesabı adı
  • Anahtar1

İndirdiğiniz batch-dotnet-quickstart klasörünüze gidin ve kopyaladığınız değerleri sağlamak için Program.cs dosyasında kimlik bilgisi dizelerini düzenleyin:

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

Önemli

Hesap anahtarlarının uygulama kaynağında kullanıma açıklanması Üretim kullanımı için önerilmez. Kimlik bilgilerine erişimi kısıtlamalı ve değişkenleri veya yapılandırma dosyasını kullanarak kodunuzda bunlara başvurmalısınız. Batch ve Depolama hesap anahtarlarını Azure Key Vault'ta depolamak en iyisidir.

Uygulamayı derleme ve çalıştırma ve çıkışı görüntüleme

Batch iş akışının çalıştığını görmek için uygulamayı Visual Studio'da derleyin ve çalıştırın. Komut satırını dotnet build ve dotnet run komutları da kullanabilirsiniz.

Visual Studio'da:

  1. BatchDotNetQuickstart.sln dosyasını açın, Çözüm Gezgini çözüme sağ tıklayın ve Oluştur'a tıklayın. İstenirse NuGet paketlerini güncelleştirmek veya geri yüklemek için NuGet Paket Yöneticisi kullanın.

  2. Derleme tamamlandıktan sonra, uygulamayı çalıştırmak için üst menü çubuğunda BatchDotNetQuickstart'ı seçin.

Varsayılan yapılandırmayla tipik çalışma süresi yaklaşık beş dakikadır. İlk havuz düğümü kurulumu en çok zaman alır. İşi yeniden çalıştırmak için, işi önceki çalıştırmadan silin, ancak havuzu silmeyin. Önceden yapılandırılmış bir havuzda işin tamamlanması birkaç saniye sürer.

Uygulama aşağıdaki örneğe benzer bir çıkış döndürür:

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

Havuzun işlem düğümleri başlatılırken duraklama Monitoring all tasks for 'Completed' state, timeout in 00:30:00... olur. Görevler oluşturulduktan sonra Batch bunları havuzda çalıştırılacak şekilde kuyruğa alır. İlk işlem düğümü kullanılabilir olduğunda, ilk görev düğümde çalışır. Azure portalındaki Batch hesabı sayfanızdan düğüm, görev ve iş durumunu izleyebilirsiniz.

Her görev tamamlandıktan sonra aşağıdaki örneğe benzer bir çıktı görürsünüz:

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

Kodu gözden geçirin

Azure Batch .NET Hızlı Başlangıcı'ndaki adımları anlamak için kodu gözden geçirin.

Hizmet istemcileri oluşturma ve kaynak dosyalarını karşıya yükleme

  1. Uygulama, depolama hesabıyla etkileşim kurmak için .NET için Azure Depolama Blobları istemci kitaplığını kullanarak bir BlobServiceClient oluşturur.

    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. Uygulama, depolama hesabında bir kapsayıcı oluşturmak ve kapsayıcıya veri dosyaları yüklemek için başvuruyu kullanır blobServiceClient . Depolamadaki dosyalar Batch'in daha sonra işlem düğümlerine indirebileceği Batch ResourceFile nesneleri olarak tanımlanır.

    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. Uygulama Batch havuzları, işleri ve görevleri oluşturmak ve yönetmek için bir BatchClient nesnesi oluşturur. Batch istemcisi paylaşılan anahtar kimlik doğrulamasını kullanır. Batch, Microsoft Entra kimlik doğrulamayı da destekler.

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

İşlem düğümleri havuzu oluşturma

Bir Batch havuzu oluşturmak için uygulama, düğüm sayısını, VM boyutunu ve havuz yapılandırmasını ayarlamak için BatchClient.PoolOperations.CreatePool yöntemini kullanır. Aşağıdaki VirtualMachineConfiguration nesnesi, Bir Windows Server Market görüntüsüne ImageReference belirtir. Batch, çok çeşitli Windows Server ve Linux Market işletim sistemi görüntülerini destekler ve özel VM görüntülerini de destekler.

PoolNodeCount ve VM boyutu PoolVMSize tanımlı sabitlerdir. Uygulama iki Standard_A1_v2 düğümünden oluşan bir havuz oluşturur. Bu boyut, bu hızlı başlangıç için iyi bir performans ve maliyet dengesi sunar.

Commit yöntemi, havuzu Batch hizmetine gönderir.


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();
    }
...

Batch işi oluşturma

Batch işi bir veya daha fazla görevin mantıksal gruplandırmasıdır. İş, görevler için ortak olan öncelik ve görevlerin çalıştırılacak havuzu gibi ayarları içerir.

Uygulama, havuzunuzda bir iş oluşturmak üzere BatchClient.JobOperations.CreateJob yöntemini kullanır. Commit yöntemi, işi Batch hizmetine gönderir. Başlangıçta iş hiçbir görev içermez.

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

    job.Commit();
}
...

Görev oluşturma

Batch, işlem düğümlerine uygulama ve betik dağıtmanın çeşitli yollarını sağlar. Bu uygulama CloudTask giriş ResourceFile nesnelerinin listesini oluşturur. Her görev, CommandLine özelliğini kullanarak bir giriş dosyasını işler. Batch komut satırı, uygulamanızı veya betiğinizi belirttiğiniz yerdir.

Aşağıdaki koddaki komut satırı, giriş dosyalarını görüntülemek için Windows type komutunu çalıştırır. Ardından uygulama, her görevi addTask yöntemiyle işe ekler ve bu da görevi işlem düğümlerinde çalıştırılacak şekilde kuyruğa alır.

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

Görev çıktısını görüntüleme

Uygulama, görevleri izlemek ve tamamlandığından emin olmak için bir TaskStateMonitor oluşturur. Her görev başarıyla çalıştırıldığında, çıkışı stdout.txt dosyasına yazar. Ardından uygulama, tamamlanan her görevin stdout.txt dosyasını görüntülemek için CloudTask.ComputeNodeInformation özelliğini kullanır.

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

Kaynakları temizleme

Uygulama kendi oluşturduğu depolama kapsayıcısını otomatik olarak siler ve Batch havuzu ve işini silme seçeneğini sunar. İş çalıştırmasalar bile, düğümler çalışırken havuzlar ve düğümler ücretlendirilir. Havuza artık ihtiyacınız yoksa silin.

Batch hesabınıza ve depolama hesabınıza artık ihtiyacınız kalmadığında, bunları içeren kaynak grubunu silebilirsiniz. Azure portalında kaynak grubu sayfasının üst kısmındaki Kaynak grubunu sil'i seçin. Kaynak grubunu sil ekranında kaynak grubu adını girin ve Sil'i seçin.

Sonraki adımlar

Bu hızlı başlangıçta Batch havuzu, düğümler, iş ve görevler oluşturmak için Batch .NET API'sini kullanan bir uygulama çalıştırmıştınız. İş kaynak dosyalarını bir depolama kapsayıcısına yükledi, düğümlerde görevler çalıştırdı ve düğümlerden çıktıyı görüntüledi.

Batch hizmetinin temel kavramlarını anladığınıza göre, Batch'i daha gerçekçi ve daha büyük ölçekli iş yükleriyle kullanmaya hazırsınız. Azure Batch hakkında daha fazla bilgi edinmek ve gerçek dünya uygulamasıyla paralel iş yükünde gezinmek için Batch .NET öğreticisine geçin.