Hızlı Başlangıç: .NET API ile ilk Azure Batch işinizi çalıştırmaQuickstart: Run your first Azure Batch job with the .NET API

Bu hızlı başlangıç, Azure Batch .NET API üzerinde derlenmiş bir C# uygulamasından Azure Batch işi çalıştırır.This quickstart runs an Azure Batch job from a C# application built on the Azure Batch .NET API. Uygulama, Azure depolamaya birkaç veri dosyası yükler ve sonra Batch işlem düğümlerinin (sanal makine) havuzunu oluşturur.The app uploads several input data files to Azure storage and then creates a pool of Batch compute nodes (virtual machines). Daha sonra, temel bir komut kullanarak havuz üzerindeki her bir giriş dosyasını işlemek üzere görevler çalıştıran örnek bir oluşturur.Then, it creates a sample job that runs tasks to process each input file on the pool using a basic command. Bu hızlı başlangıcı tamamladıktan sonra, Batch hizmetinin temel kavramlarını anlayacak ve Batch’i daha büyük ölçekte daha gerçekçi iş yükleri ile denemeye hazır olacaksınız.After completing this quickstart, you will understand the key concepts of the Batch service and be ready to try Batch with more realistic workloads at larger scale.

Hızlı başlangıç uygulama iş akışı

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.

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

Visual Studio BatchDotNetQuickstart.sln çözüm dosyasını içeren dizine gidin.Navigate to the directory that contains the Visual Studio solution file BatchDotNetQuickstart.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.

Uygulamayı derleme ve çalıştırmaBuild and run the app

Batch iş akışını uygulamalı olarak görmek için uygulamayı Visual Studio'da veya dotnet build ve dotnet run komutlarıyla komut satırında derleyip çalıştırın.To see the Batch workflow in action, 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. Görevler, ilk işlem düğümünü çalışır çalışmaz çalışmak üzere kuyruğa alınır.Tasks are queued to run as soon as the first compute node is running. 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.

Sample start: 11/16/2018 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...

Görevleri tamamladıktan sonra her görev için aşağıdakine benzer bir çıktı görürsünüz:After tasks complete, you see output similar to the following for each task:

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 in business, engineering, science, and other pursuits that require running lots of automated tasks....
stderr:
...

Varsayılan yapılandırmasında uygulama çalıştırıldığında tipik yürütme süresi yaklaşık 5 dakikadır.Typical execution time is approximately 5 minutes when you run the application in its default configuration. En çok süren işlem ilk havuz kurulumudur.Initial pool setup takes the most time. İşi yeniden çalıştırmak için önceki çalıştırmadan işi silin ve havuzu silmeyin.To run the job again, delete the job from the previous run and do not delete the pool. Önceden yapılandırılmış bir havuzda işin tamamlanması birkaç saniye sürer.On a preconfigured pool, the job completes in a few seconds.

Kodu gözden geçirinReview the code

Bu hızlı başlangıçtaki .NET uygulaması şunları yapar:The .NET app in this quickstart does the following:

  • Azure depolama hesabınızdaki blob kapsayıcısına üç küçük metin dosyası yükler.Uploads three small text files to a blob container in your Azure storage account. Bu dosyalar, Batch tarafından işlenecek girişlerdir.These files are inputs for processing by Batch.
  • Windows Server çalıştıran bir işlem düğümleri havuzu oluşturur.Creates a pool of compute nodes running Windows Server.
  • Düğümler üzerinde çalıştırılacak bir iş ve üç görev oluşturur.Creates a job and three tasks to run on the nodes. Her görev bir Windows komut satırı kullanarak giriş dosyalarından birini işler.Each task processes one of the input files using a Windows command line.
  • Görevler tarafından döndürülen dosyaları gösterir.Displays files returned by the tasks.

Ayrıntılar için Program.cs dosyasına ve aşağıdaki bölümlere bakın.See the file Program.cs and the following sections for details.

Başlangıç bilgileriPreliminaries

Bir depolama hesabı ile etkileşimde bulunmak üzere uygulama, .NET için Azure Depolama İstemci Kitaplığı’nı kullanır.To interact with a storage account, the app uses the Azure Storage Client Library for .NET. CloudStorageAccount ile hesaba bir başvuru oluşturur ve buradan da bir CloudBlobClient oluşturur.It creates a reference to the account with CloudStorageAccount, and from that creates a CloudBlobClient.

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

Uygulama, depolama hesabında bir kapsayıcı oluşturmak ve kapsayıcıya veri dosyaları yüklemek için blobClient başvurusunu kullanır.The app uses the blobClient reference to create a container in the storage account and to upload data files to the container. 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.

List<string> inputFilePaths = new List<string>
{
    "taskdata0.txt",
    "taskdata1.txt",
    "taskdata2.txt"
};

List<ResourceFile> inputFiles = new List<ResourceFile>();

foreach (string filePath in inputFilePaths)
{
    inputFiles.Add(UploadFileToContainer(blobClient, inputContainerName, filePath));
}

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, Azure Active Directory kimlik doğrulamasını da destekler.)(Batch also supports Azure Active Directory authentication.)

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

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

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

Bir Batch havuzu oluşturmak için uygulama, düğüm sayısını, VM boyutunu ve havuz yapılandırmasını ayarlamak üzere BatchClient.PoolOperations.CreatePool yöntemini kullanır.To create a Batch pool, the app 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 Linux ve Windows Server görüntülerinin yanı sıra özel VM görüntülerini destekler.Batch supports a wide range of Linux and Windows Server images in the Azure Marketplace, as well as custom VM images.

Düğüm sayısı (PoolNodeCount) ve VM boyutu (PoolVMSize), tanımlı sabitlerdir.The number of nodes (PoolNodeCount) and VM size (PoolVMSize) are defined constants. Varsayılan olarak, örnek 2 boyutunda Standard_A1_v2 düğümleri havuzu oluşturur.The sample by default creates a pool of 2 size Standard_A1_v2 nodes. Önerilen boyut, bu hızlı örnek için performans ile maliyetin iyi bir dengesini sunar.The size suggested offers a good balance of performance versus cost for this quick example.

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


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şturmaCreate a Batch job

Batch işi bir veya daha fazla görevin mantıksal gruplandırmasıdır.A Batch job is a logical grouping of one or more tasks. Bir iş, öncelik gibi görevler arasında ortak olan ayarları ve görevlerin çalıştırılacağı havuzu içerir.A job includes settings common to the tasks, such as priority and the pool to run tasks on. Uygulama, havuzunuzda bir iş oluşturmak üzere BatchClient.JobOperations.CreateJob yöntemini kullanır.The app uses the BatchClient.JobOperations.CreateJob method to create a job on your pool.

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

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

    job.Commit();
}
...

Görev oluşturmaCreate tasks

Uygulama, CloudTask nesnelerinin bir listesini oluşturur.The app creates a list of CloudTask objects. Her görev, CommandLine özelliği kullanarak giriş ResourceFile nesnesini işler.Each task processes an input ResourceFile object using a CommandLine property. Örnekte, komut satırı giriş dosyasını göstermek üzere Windows type komutunu çalıştırır.In the sample, the command line runs the Windows type command to display the input file. Bu komut, tanıtım amaçlı basit bir örnektir.This command is a simple example for demonstration purposes. Batch kullandığınızda komut satırı, uygulamanızı veya betiğinizi belirttiğiniz yerdir.When you use Batch, the command line is where you specify your app or script. Batch, işlem düğümlerine uygulama ve betik dağıtmanın birkaç yolunu sağlar.Batch provides a number of ways to deploy apps and scripts to compute nodes.

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

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

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

batchClient.JobOperations.AddTask(JobId, tasks);

Görev çıkışını görüntülemeView task output

Uygulama, tamamlandığından emin olmak üzere görevleri izlemek için bir TaskStateMonitor oluşturur.The app creates a TaskStateMonitor to monitor the tasks to make sure they complete. Daha sonra uygulama, CloudTask.ComputeNodeInformation özelliğini kullanarak her bir tamamlanmış görevin oluşturduğu stdout.txt dosyasını gösterir.Then, the app uses the CloudTask.ComputeNodeInformation property to display the stdout.txt file generated by each completed task. Görev başarıyla çalıştırıldığında, görev komutunun çıkışı stdout.txt dosyasına yazılır:When the task runs successfully, the output of the task command is written to stdout.txt:

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ı temizlemeClean up resources

Uygulama kendi oluşturduğu depolama kapsayıcısını otomatik olarak siler ve Batch havuzu ve işini silme seçeneğini sunar.The app automatically deletes the storage container it creates, and gives you the option to delete the Batch pool and job. Zamanlanmış bir iş olmasa bile, düğümler çalışırken havuz için sizden ücret alınır.You are charged for the pool while the nodes are running, even if no jobs are scheduled. Havuz artık gerekli değilse silin.When you no longer need the pool, delete it. 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.

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 hızlı başlangıçta, bir Batch havuzu ve bir Batch işi oluşturmak amacıyla Batch .NET API’si kullanılarak oluşturulan küçük bir uygulamayı çalıştırdınız.In this quickstart, you ran a small app built using the Batch .NET API to create a Batch pool and a Batch job. İş, örnek görevler çalıştırmış ve düğümler üzerinde oluşturulan çıktıyı indirmiştir.The job ran sample tasks, and downloaded output created on the nodes. Batch hizmetinin temel kavramlarını anladıktan sonra, Batch’i daha büyük ölçekte daha gerçekçi iş yükleri ile denemeye hazırsınız.Now that you understand the key concepts of the Batch service, you are ready to try Batch with more realistic workloads at larger scale. Azure Batch hakkında daha fazla bilgi almak ve bir gerçek yaşam uygulaması ile paralel iş yükü açıklaması görmek için Batch .NET öğreticisine geçin.To learn more about Azure Batch, and walk through a parallel workload with a real-world application, continue to the Batch .NET tutorial.