Öğretici: .NET API’si kullanarak Azure Batch ile paralel iş yükü çalıştırmaTutorial: Run a parallel workload with Azure Batch using the .NET API

Büyük ölçekli paralel ve yüksek performanslı bilgi işlem (HPC) toplu işlerini Azure’da verimli bir şekilde çalıştırmak için Azure Batch’i kullanın.Use Azure Batch to run large-scale parallel and high-performance computing (HPC) batch jobs efficiently in Azure. Bu öğreticide, Batch kullanarak paralel iş yükü çalıştırmaya ilişkin bir C# örneği açıklanmaktadır.This tutorial walks through a C# example of running a parallel workload using Batch. Genel bir Batch uygulaması iş akışı hakkında bilgi alacak ve Batch ve Depolama kaynakları ile programlı olarak etkileşimde bulunmayı öğreneceksiniz.You learn a common Batch application workflow and how to interact programmatically with Batch and Storage resources. Aşağıdakileri nasıl yapacağınızı öğrenirsiniz:You learn how to:

  • Batch hesabınıza bir uygulama paketi eklemeAdd an application package to your Batch account
  • Batch ve Depolama hesapları ile kimlik doğrulamasıAuthenticate with Batch and Storage accounts
  • Depolama hizmetine giriş dosyaları yüklemeUpload input files to Storage
  • Bir uygulamayı çalıştırmak için işlem düğümleri havuzu oluşturmaCreate a pool of compute nodes to run an application
  • Giriş dosyalarını işlemek için bir iş ve görevler oluşturmaCreate a job and tasks to process input files
  • Görev yürütmeyi izlemeMonitor task execution
  • Çıkış dosyalarını almaRetrieve output files

Bu öğreticide, ffmpeg açık kaynak aracını kullanarak MP4 medya dosyalarını MP3 biçimine paralel şekilde dönüştürürsünüz.In this tutorial, you convert MP4 media files in parallel to MP3 format using the ffmpeg open-source tool.

Azure aboneliğinizyoksa başlamadan önce ücretsiz bir hesap oluşturun.If you don't have an Azure subscription, create a free account before you begin.

Ön koşullarPrerequisites

Azure'da oturum açınSign in to Azure

https://portal.azure.com adresinden Azure portalında oturum açın.Sign in to the Azure portal at https://portal.azure.com.

Uygulama paketi eklemeAdd an application package

Batch hesabınıza uygulama paketi olarak ffmpeg eklemek için Azure portalını kullanın.Use the Azure portal to add ffmpeg to your Batch account as an application package. Uygulama paketleri, görev uygulamalarını ve havuzunuzdaki işlem düğümlerine dağıtımlarını yönetmenize yardımcı olur.Application packages help you manage task applications and their deployment to the compute nodes in your pool.

  1. Azure portalında Diğer hizmetler > Batch hesapları seçeneğine ve Batch hesabınızın adına tıklayın.In the Azure portal, click More services > Batch accounts, and click the name of your Batch account.
  2. Uygulamalar > Ekle’ye tıklayın.Click Applications > Add.
  3. Uygulama kimliği için ffmpeg, paket sürümü için 3.4 girin.For Application id enter ffmpeg, and a package version of 3.4. Daha önce indirdiğiniz ffmpeg zip dosyasını seçip Tamam’a tıklayın.Select the ffmpeg zip file you downloaded previously, and then click OK. ffmpeg uygulama paketi, Batch hesabınıza eklenir.The ffmpeg application package is added to your Batch account.

Uygulama paketi ekleme

Hesap kimlik bilgilerini almaGet account credentials

Bu örnekte, Batch ve depolama hesaplarınız için kimlik bilgileri sağlamanız gerekir.For this example, you need to provide credentials for your Batch and Storage accounts. Gerekli kimlik bilgilerini almanın kolay yolu Azure portalındadır.A straightforward way to get the necessary credentials is in the Azure portal. (Bu kimlik bilgilerini ayrıca Azure API'lerini veya komut satırı araçlarını kullanarak da alabilirsiniz.)(You can also get these credentials using the Azure APIs or command-line tools.)

  1. Tüm hizmetler > Batch hesapları' nı seçin ve ardından Batch hesabınızın adını seçin.Select All services > Batch accounts, and then select the name of your Batch account.

  2. Batch kimlik bilgilerini görmek için anahtarlar' ı seçin.To see the Batch credentials, select Keys. Batch hesabı, URL ve Birincil erişim anahtarı değerlerini metin düzenleyiciye kopyalayın.Copy the values of Batch account, URL, and Primary access key to a text editor.

  3. Depolama hesabı adını ve anahtarlarını görmek için depolama hesabı' nı seçin.To see the Storage account name and keys, select Storage account. Depolama hesabı adı ve Key1 değerlerini bir metin düzenleyiciye kopyalayın.Copy the values of Storage account name and Key1 to a text editor.

Örneği indirme ve çalıştırmaDownload and run the sample

Örneği indirmeDownload the sample

GitHub’dan örnek uygulamayı indirin veya kopyalayın.Download or clone the sample app from GitHub. Örnek uygulama deposunu bir Git istemcisi ile kopyalamak için aşağıdaki komutu kullanın:To clone the sample app repo with a Git client, use the following command:

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

Visual Studio BatchDotNetFfmpegTutorial.sln çözüm dosyasını içeren dizine gidin.Navigate to the directory that contains the Visual Studio solution file BatchDotNetFfmpegTutorial.sln.

Çözüm dosyasını Visual Studio'da açın ve Program.cs içindeki kimlik bilgisi dizelerini hesaplarınız için edindiğiniz değerlerle güncelleştirin.Open the solution file in Visual Studio, and update the credential strings in Program.cs with the values you obtained for your accounts. Örneğin:For example:

// Batch account credentials
private const string BatchAccountName = "mybatchaccount";
private const string BatchAccountKey  = "xxxxxxxxxxxxxxxxE+yXrRvJAqT9BlXwwo1CwF+SwAYOxxxxxxxxxxxxxxxx43pXi/gdiATkvbpLRl3x14pcEQ==";
private const string BatchAccountUrl  = "https://mybatchaccount.mybatchregion.batch.azure.com";

// Storage account credentials
private const string StorageAccountName = "mystorageaccount";
private const string StorageAccountKey  = "xxxxxxxxxxxxxxxxy4/xxxxxxxxxxxxxxxxfwpbIC5aAWA8wDu+AFXZB827Mt9lybZB1nUcQbQiUrkPtilK5BQ==";

Not

Örneği basitleştirmek için Batch ve Depolama hesabı kimlik bilgileri düz metin şeklinde gösterilmiştir.To simplify the example, the Batch and Storage account credentials appear in clear text. Uygulamada kimlik bilgilerine erişimi kısıtlamanızı ve bunlara kodunuzda ortam değişkenlerini kullanarak veya yapılandırma dosyası ile başvurmanızı öneririz.In practice, we recommend that you restrict access to the credentials and refer to them in your code using environment variables or a configuration file. Örnekler için bkz. Azure Batch kod örnekleri deposu.For examples, see the Azure Batch code samples repo.

Ayrıca, çözümdeki ffmpeg uygulama paketi başvurusunun Batch hesabınıza yüklediğiniz ffmpeg paketinin kimlik ve sürümüyle eşleştiğinden emin olun.Also, make sure that the ffmpeg application package reference in the solution matches the Id and version of the ffmpeg package that you uploaded to your Batch account.

const string appPackageId = "ffmpeg";
const string appPackageVersion = "3.4";

Örnek projeyi derleme ve çalıştırmaBuild and run the sample project

Uygulamayı Visual Studio'da veya dotnet build ve dotnet run komutlarıyla komut satırında derleyip çalıştırın.Build and run the application in Visual Studio, or at the command line with the dotnet build and dotnet run commands. Uygulamayı çalıştırdıktan sonra, uygulamanın her bir parçasının ne işe yaradığını öğrenmek üzere kodu gözden geçirin.After running the application, review the code to learn what each part of the application does. Örneğin Visual Studio'da:For example, in Visual Studio:

  • Çözüm Gezgini'nde çözüme sağ tıklayın ve Derleme Çözümü’ne tıklayın.Right-click the solution in Solution Explorer and click Build Solution.

  • İstenirse, herhangi bir NuGet paketinin geri yüklenmesini onaylayın.Confirm the restoration of any NuGet packages, if you're prompted. Eksik paketleri indirmeniz gerekirse, NuGet Paket Yöneticisi’nin yüklü olduğundan emin olun.If you need to download missing packages, ensure the NuGet Package Manager is installed.

Ardından çalıştırın.Then run it. Örnek uygulamayı çalıştırdığınızda, konsol çıktısı aşağıdakine benzer.When you run the sample application, the console output is similar to the following. Yürütme sırasında, havuzun işlem düğümleri başlatıldığı sırada Monitoring all tasks for 'Completed' state, timeout in 00:30:00... konumunda bir duraklama yaşarsınız.During execution, you experience a pause at Monitoring all tasks for 'Completed' state, timeout in 00:30:00... while the pool's compute nodes are started.

Sample start: 11/19/2018 3:20:21 PM

Container [input] created.
Container [output] created.
Uploading file LowPriVMs-1.mp4 to container [input]...
Uploading file LowPriVMs-2.mp4 to container [input]...
Uploading file LowPriVMs-3.mp4 to container [input]...
Uploading file LowPriVMs-4.mp4 to container [input]...
Uploading file LowPriVMs-5.mp4 to container [input]...
Creating pool [WinFFmpegPool]...
Creating job [WinFFmpegJob]...
Adding 5 tasks to job [WinFFmpegJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
Success! All tasks completed successfully within the specified timeout period.
Deleting container [input]...

Sample end: 11/19/2018 3:29:36 PM
Elapsed time: 00:09:14.3418742

Havuz, işlem düğümleri, iş ve görevleri izlemek için Azure portalında Batch hesabınıza gidin.Go to your Batch account in the Azure portal to monitor the pool, compute nodes, job, and tasks. Örneğin, havuzunuzdaki işlem düğümlerinin ısı haritasını görmek için Havuzlar > WinFFmpegPool öğesine tıklayın.For example, to see a heat map of the compute nodes in your pool, click Pools > WinFFmpegPool.

Görevler çalıştırılırken ısı haritası aşağıdakine benzer:When tasks are running, the heat map is similar to the following:

Havuz ısı haritası

Varsayılan yapılandırmasında uygulama çalıştırıldığında tipik yürütme süresi yaklaşık 10 dakikadır.Typical execution time is approximately 10 minutes when you run the application in its default configuration. En uzun süreyi havuz oluşturma işlemi alır.Pool creation takes the most time.

Çıkış dosyalarını almaRetrieve output files

ffmpeg görevleri tarafından oluşturulan çıkış MP3 dosyalarını indirmek için Azure portalını kullanabilirsiniz.You can use the Azure portal to download the output MP3 files generated by the ffmpeg tasks.

  1. Tüm hizmetler > Depolama hesapları seçeneğine ve sonra da depolama hesabınızın adına tıklayın.Click All services > Storage accounts, and then click the name of your storage account.
  2. Bloblar > çıkış seçeneğine tıklayın.Click Blobs > output.
  3. Çıkış MP3 dosyalarından birine sağ tıklayın ve ardından İndir’e tıklayın.Right-click one of the output MP3 files and then click Download. Dosyayı açmak veya kaydetmek için tarayıcınızdaki yönergeleri izleyin.Follow the prompts in your browser to open or save the file.

Çıkış dosyasını indirme

Bu örnekte gösterilmese de dosyaları programlamayla işlem düğümlerinden veya depolama kapsayıcısından indirebilirsiniz.Although not shown in this sample, you can also download the files programmatically from the compute nodes or from the storage container.

Kodu gözden geçirinReview the code

Aşağıdaki bölümlerde örnek uygulama, Batch hizmetinde iş yükünü işlemeyi gerçekleştiren adımlara ayrılmıştır.The following sections break down the sample application into the steps that it performs to process a workload in the Batch service. Örnekteki her bir kod satırı ele alınmadığı için, bu makalenin geri kalanını okurken çözümdeki Program.cs dosyasına bakın.Refer to the file Program.cs in the solution while you read the rest of this article, since not every line of code in the sample is discussed.

Blob ve Batch istemcilerinde kimlik doğrulamasıAuthenticate Blob and Batch clients

Bağlı depolama hesabı ile etkileşimde bulunmak üzere uygulama, .NET için Azure Depolama İstemci Kitaplığı’nı kullanır.To interact with the linked storage account, the app uses the Azure Storage Client Library for .NET. CloudStorageAccount ile hesaba başvuru oluşturur ve paylaşılan anahtar kimlik doğrulamasını kullanarak kimlik doğrulaması yapar.It creates a reference to the account with CloudStorageAccount, authenticating using shared key authentication. Sonra bir CloudBlobClient oluşturur.Then, it creates a CloudBlobClient.

// Construct the Storage account connection string
string storageConnectionString = String.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}",
                                StorageAccountName, StorageAccountKey);

// Retrieve the storage account
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

Uygulama, Batch hizmetinde havuz, iş ve görevleri oluşturup yönetmek üzere bir BatchClient nesnesi oluşturur.The app creates a BatchClient object to create and manage pools, jobs, and tasks in the Batch service. Örnekteki Batch istemcisi, paylaşılan anahtar kimlik doğrulaması kullanır.The Batch client in the sample uses shared key authentication. Batch Ayrıca, bireysel kullanıcıların veya katılımsız bir uygulamanın kimliğini doğrulamak için Azure Active Directory aracılığıyla kimlik doğrulamasını destekler.Batch also supports authentication through Azure Active Directory to authenticate individual users or an unattended application.

BatchSharedKeyCredentials sharedKeyCredentials = new BatchSharedKeyCredentials(BatchAccountUrl, BatchAccountName, BatchAccountKey);

using (BatchClient batchClient = BatchClient.Open(sharedKeyCredentials))
...

Giriş dosyalarını karşıya yüklemeUpload input files

Uygulama, giriş dosyaları için bir depolama kapsayıcısı (MP4 biçimi) ve görev çıkışı için bir kapsayıcı oluşturmak üzere blobClient nesnesini CreateContainerIfNotExistAsync yöntemine geçirir.The app passes the blobClient object to the CreateContainerIfNotExistAsync method to create a storage container for the input files (MP4 format) and a container for the task output.

CreateContainerIfNotExistAsync(blobClient, inputContainerName);
CreateContainerIfNotExistAsync(blobClient, outputContainerName);

Sonra, dosyalar yerel InputFiles klasöründen giriş kapsayıcısına yüklenir.Then, files are uploaded to the input container from the local InputFiles folder. Depolama alanındaki dosyalar, Batch hizmetinin daha sonra işlem düğümlerine indirebileceği Batch ResourceFile nesneleri olarak tanımlanır.The files in storage are defined as Batch ResourceFile objects that Batch can later download to compute nodes.

Dosyalar karşıya yüklenirken Program.cs içindeki iki yöntem kullanılır:Two methods in Program.cs are involved in uploading the files:

  • UploadFilesToContainerAsync: ResourceFile nesnelerinin bir koleksiyonunu döndürür ve inputFilePathsparametresine geçirilen her dosyayı karşıya yüklemek için UploadResourceFileToContainerAsync çağrısı yapar.UploadFilesToContainerAsync: Returns a collection of ResourceFile objects and internally calls UploadResourceFileToContainerAsync to upload each file that is passed in the inputFilePaths parameter.
  • UploadResourceFileToContainerAsync: Her dosyayı blob olarak giriş kapsayıcısına yükler.UploadResourceFileToContainerAsync: Uploads each file as a blob to the input container. Blob karşıya yükledikten sonra, dosya için paylaşılan erişim imzasını (SAS) alır ve temsil ettiği bir ResourceFile nesnesini döndürür.After uploading the file, it obtains a shared access signature (SAS) for the blob and returns a ResourceFile object to represent it.
string inputPath = Path.Combine(Environment.CurrentDirectory, "InputFiles");

List<string> inputFilePaths = new List<string>(Directory.GetFileSystemEntries(inputPath, "*.mp4",
    SearchOption.TopDirectoryOnly));

List<ResourceFile> inputFiles = await UploadFilesToContainerAsync(
  blobClient,
  inputContainerName,
  inputFilePaths);

Dosyaları .NET ile blob olarak bir depolama hesabına yükleme hakkında ayrıntılar için bkz. .NET kullanarak blobları yükleme, indirme ve listeleme.For details about uploading files as blobs to a storage account with .NET, see Upload, download, and list blobs using .NET.

İşlem düğümleri havuzu oluşturmaCreate a pool of compute nodes

Ardından örnek, CreatePoolIfNotExistAsync çağrısıyla Batch hesabında bir işlem düğümü havuzu oluşturur.Next, the sample creates a pool of compute nodes in the Batch account with a call to CreatePoolIfNotExistAsync. Bu tanımlı yöntem, düğüm sayısını, VM boyutunu ve havuz yapılandırmasını ayarlamak üzere BatchClient.PoolOperations.CreatePool yöntemini kullanır.This defined method uses the BatchClient.PoolOperations.CreatePool method to set the number of nodes, VM size, and a pool configuration. Burada VirtualMachineConfiguration nesnesi, Azure Market’te yayımlanmış bir Windows Server görüntüsüne ImageReference belirtir.Here, a VirtualMachineConfiguration object specifies an ImageReference to a Windows Server image published in the Azure Marketplace. Batch, Azure Market’te çok çeşitli VM görüntülerinin yanı sıra özel VM görüntülerini destekler.Batch supports a wide range of VM images in the Azure Marketplace, as well as custom VM images.

Düğüm sayısı ve VM boyutu, tanımlı sabitler kullanılarak ayarlanır.The number of nodes and VM size are set using defined constants. Batch, adanmış düğümleri ve düşük öncelikli düğümleri destekler ve havuzlarınızda bunlardan birini ya da her ikisini birden kullanabilirsiniz.Batch supports dedicated nodes and low-priority nodes, and you can use either or both in your pools. Adanmış düğümler, havuzunuz için ayrılmıştır.Dedicated nodes are reserved for your pool. Düşük öncelikli düğümler ise Azure’daki fazlalık VM kapasitesinden indirimli bir fiyat karşılığında sunulur.Low-priority nodes are offered at a reduced price from surplus VM capacity in Azure. Azure’da yeterli kapasite yoksa düşük öncelikli düğümler kullanılamaz duruma gelir.Low-priority nodes become unavailable if Azure does not have enough capacity. Örnek, varsayılan olarak Standard_A1_v2 boyutunda yalnızca 5 düşük öncelikli düğüm içeren bir havuz oluşturur.The sample by default creates a pool containing only 5 low-priority nodes in size Standard_A1_v2.

ffmpeg uygulaması, havuz yapılandırmasına bir ApplicationPackageReference eklenerek işlem düğümlerine dağıtılır.The ffmpeg application is deployed to the compute nodes by adding an ApplicationPackageReference to the pool configuration.

CommitAsync yöntemi, havuzu Batch hizmetine gönderir.The CommitAsync method submits the pool to the Batch service.

ImageReference imageReference = new ImageReference(
    publisher: "MicrosoftWindowsServer",
    offer: "WindowsServer",
    sku: "2016-Datacenter-smalldisk",
    version: "latest");

VirtualMachineConfiguration virtualMachineConfiguration =
    new VirtualMachineConfiguration(
    imageReference: imageReference,
    nodeAgentSkuId: "batch.node.windows amd64");

pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    targetDedicatedComputeNodes: DedicatedNodeCount,
    targetLowPriorityComputeNodes: LowPriorityNodeCount,
    virtualMachineSize: PoolVMSize,
    virtualMachineConfiguration: virtualMachineConfiguration);

pool.ApplicationPackageReferences = new List<ApplicationPackageReference>
    {
    new ApplicationPackageReference {
    ApplicationId = appPackageId,
    Version = appPackageVersion}};

await pool.CommitAsync();  

Bir iş oluşturmaCreate a job

Bir Batch işi, üzerinde görevlerin çalıştırılacağı bir havuz ve iş için öncelik ile zamanlama gibi isteğe bağlı ayarları belirtir.A Batch job specifies a pool to run tasks on and optional settings such as a priority and schedule for the work. Örnek, CreateJobAsync çağrısıyla bir iş oluşturur.The sample creates a job with a call to CreateJobAsync. Bu tanımlı yöntem, havuzunuzda bir iş oluşturmak üzere BatchClient.JobOperations.CreateJob yöntemini kullanır.This defined method uses the BatchClient.JobOperations.CreateJob method to create a job on your pool.

CommitAsync yöntemi, işi Batch hizmetine gönderir.The CommitAsync method submits the job to the Batch service. Başlangıçta iş hiçbir görev içermez.Initially the job has no tasks.

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

await job.CommitAsync();

Görev oluşturmaCreate tasks

Örnek, AddTasksAsync yöntemini çağırarak iş içinde görevler oluşturur ve CloudTask nesnelerinin bir listesini oluşturur.The sample creates tasks in the job with a call to the AddTasksAsync method, which creates a list of CloudTask objects. Her CloudTask, bir CommandLine özelliği kullanarak giriş ResourceFile nesnesini işlemek üzere ffmpeg çalıştırır.Each CloudTask runs ffmpeg to process an input ResourceFile object using a CommandLine property. ffmpeg, daha önce havuz oluşturulduğunda her bir düğüme yüklenmiştir.ffmpeg was previously installed on each node when the pool was created. Burada komut satırı, her bir giriş MP4 (video) dosyasını bir MP3 (ses) dosyasına dönüştürmek için ffmpeg çalıştırır.Here, the command line runs ffmpeg to convert each input MP4 (video) file to an MP3 (audio) file.

Örnek, komut satırını çalıştırdıktan sonra MP3 dosyası için bir OutputFile nesnesi oluşturur.The sample creates an OutputFile object for the MP3 file after running the command line. Her bir görevin çıkış dosyaları (bu örnekte bir tane), görevin OutputFiles özelliği kullanılarak bağlı depolama hesabındaki bir kapsayıcıya yüklenir.Each task's output files (one, in this case) are uploaded to a container in the linked storage account, using the task's OutputFiles property. Daha önce kod örneğinde, çıkış kapsayıcısına yazma erişimi sağlamak için paylaşılan erişim imza URL 'SI (outputContainerSasUrl) elde edildi.Previously in the code sample, a shared access signature URL (outputContainerSasUrl) was obtained to provide write access to the output container. outputFile nesnesi üzerinde ayarlanan koşullara göz önünde.Note the conditions set on the outputFile object. Bir görevden çıkış dosyası, yalnızca görev başarıyla tamamlandıktan sonra kapsayıcıya yüklenir (OutputFileUploadCondition.TaskSuccess).An output file from a task is only uploaded to the container after the task has successfully completed (OutputFileUploadCondition.TaskSuccess). Daha fazla uygulama ayrıntısı için GitHub 'daki tam kod örneğine bakın.See the full code sample on GitHub for further implementation details.

Sonra örnek, AddTaskAsync yöntemi ile görevleri işe ekler ve işlem düğümleri üzerinde çalışmak üzere kuyruğa alır.Then, the sample adds tasks to the job with the AddTaskAsync method, which queues them to run on the compute nodes.

 // Create a collection to hold the tasks added to the job.
List<CloudTask> tasks = new List<CloudTask>();

for (int i = 0; i < inputFiles.Count; i++)
{
    string taskId = String.Format("Task{0}", i);

    // Define task command line to convert each input file.
    string appPath = String.Format("%AZ_BATCH_APP_PACKAGE_{0}#{1}%", appPackageId, appPackageVersion);
    string inputMediaFile = inputFiles[i].FilePath;
    string outputMediaFile = String.Format("{0}{1}",
        System.IO.Path.GetFileNameWithoutExtension(inputMediaFile),
        ".mp3");
    string taskCommandLine = String.Format("cmd /c {0}\\ffmpeg-3.4-win64-static\\bin\\ffmpeg.exe -i {1} {2}", appPath, inputMediaFile, outputMediaFile);

    // Create a cloud task (with the task ID and command line)
    CloudTask task = new CloudTask(taskId, taskCommandLine);
    task.ResourceFiles = new List<ResourceFile> { inputFiles[i] };

    // Task output file
    List<OutputFile> outputFileList = new List<OutputFile>();
    OutputFileBlobContainerDestination outputContainer = new OutputFileBlobContainerDestination(outputContainerSasUrl);
    OutputFile outputFile = new OutputFile(outputMediaFile,
       new OutputFileDestination(outputContainer),
       new OutputFileUploadOptions(OutputFileUploadCondition.TaskSuccess));
    outputFileList.Add(outputFile);
    task.OutputFiles = outputFileList;
    tasks.Add(task);
}

// Add tasks as a collection
await batchClient.JobOperations.AddTaskAsync(jobId, tasks);
return tasks

Görevleri izlemeMonitor tasks

Batch bir işe görevler eklediğinde, hizmet bu görevleri ilişkili havuzdaki işlem düğümleri üzerinde yürütülmek üzere otomatik olarak kuyruğa alır ve zamanlar.When Batch adds tasks to a job, the service automatically queues and schedules them for execution on compute nodes in the associated pool. Belirttiğiniz ayarlara göre, Batch tüm kuyruğa alma, zamanlama, yeniden deneme görevlerini ve diğer görev yönetimi sorumluluklarını yerine getirir.Based on the settings you specify, Batch handles all task queuing, scheduling, retrying, and other task administration duties.

Görevin yürütülüşünün izlenmesi için birçok yaklaşım vardır.There are many approaches to monitoring task execution. Bu örnek yalnızca tamamlandıktan sonra ve görevin başarısız ya da başarılı durumlarını bildirmek üzere bir MonitorTasks yöntemi tanımlar.This sample defines a MonitorTasks method to report only on completion and task failure or success states. MonitorTasks kodu, görevler hakkında yalnızca çok az bilgiyi verimli bir şekilde seçmek üzere bir ODATADetailLevel belirtir.The MonitorTasks code specifies an ODATADetailLevel to efficiently select only minimal information about the tasks. Sonra, görev durumlarını izlemeye yönelik yardımcı programlar sağlayan bir TaskStateMonitor oluşturur.Then, it creates a TaskStateMonitor, which provides helper utilities for monitoring task states. MonitorTasks içinde, örnek tüm görevlerin bir süre sınırı içerisinde TaskState.Completed düzeyine ulaşmasını bekler.In MonitorTasks, the sample waits for all tasks to reach TaskState.Completed within a time limit. Sonra işi sonlandırır ve tamamlanan tüm görevleri bildirir, ancak sıfır olmayan çıkış kodu gibi bir arıza ile karşılaşmış olabilir.Then it terminates the job and reports on any tasks that completed but may have encountered a failure such as a non-zero exit code.

TaskStateMonitor taskStateMonitor = batchClient.Utilities.CreateTaskStateMonitor();
try
{
    await taskStateMonitor.WhenAll(addedTasks, TaskState.Completed, timeout);
}
catch (TimeoutException)
{
    batchClient.JobOperations.TerminateJob(jobId);
    Console.WriteLine(incompleteMessage);
    return false;
}
batchClient.JobOperations.TerminateJob(jobId);
 Console.WriteLine(completeMessage);
...

Kaynakları temizlemeClean up resources

Görevleri çalıştırdıktan sonra, uygulama kendi oluşturduğu giriş depolama kapsayıcısını otomatik olarak siler ve Batch havuzu ve işini silme seçeneğini sunar.After it runs the tasks, the app automatically deletes the input storage container it created, and gives you the option to delete the Batch pool and job. BatchClient'ın JobOperations ve PoolOperations sınıflarının her ikisi de, silmeyi onaylamanız durumunda çağrılan ilgili silme yöntemlerini içerir.The BatchClient's JobOperations and PoolOperations classes both have corresponding delete methods, which are called if you confirm deletion. İşlerin ve görevlerin kendileri için sizden ücret alınmasa da işlem düğümleri için ücret alınır.Although you're not charged for jobs and tasks themselves, you are charged for compute nodes. Bu nedenle, havuzları yalnızca gerektiğinde ayırmanız önerilir.Thus, we recommend that you allocate pools only as needed. Havuzu sildiğinizde düğümler üzerindeki tüm görev çıkışları silinir.When you delete the pool, all task output on the nodes is deleted. Ancak çıkış dosyaları depolama hesabında kalır.However, the output files remain in the storage account.

Kaynak grubunu, Batch hesabını ve depolama hesabını artık gerekli değilse silin.When no longer needed, delete the resource group, Batch account, and storage account. Azure portalında bu işlemi yapmak için Batch hesabına ait kaynak grubunu seçin ve Kaynak Grubunu Sil’e tıklayın.To do so in the Azure portal, select the resource group for the Batch account and click Delete resource group.

Sonraki adımlarNext steps

Bu öğreticide, şunlar hakkında bilgi edindiniz:In this tutorial, you learned about how to:

  • Batch hesabınıza bir uygulama paketi eklemeAdd an application package to your Batch account
  • Batch ve Depolama hesapları ile kimlik doğrulamasıAuthenticate with Batch and Storage accounts
  • Depolama hizmetine giriş dosyaları yüklemeUpload input files to Storage
  • Bir uygulamayı çalıştırmak için işlem düğümleri havuzu oluşturmaCreate a pool of compute nodes to run an application
  • Giriş dosyalarını işlemek için bir iş ve görevler oluşturmaCreate a job and tasks to process input files
  • Görev yürütmeyi izlemeMonitor task execution
  • Çıkış dosyalarını almaRetrieve output files

Batch iş yüklerini zamanlamak ve işlemek üzere .NET API kullanmaya ilişkin daha fazla örnek için GitHub üzerindeki örneklere bakın.For more examples of using the .NET API to schedule and process Batch workloads, see the samples on GitHub.