Rychlý start: Spuštění první úlohy služby Azure Batch pomocí rozhraní API .NETQuickstart: Run your first Azure Batch job with the .NET API

Začněte s Azure Batch spuštěním úlohy z aplikace v jazyce C# postavené na rozhraní Azure Batch .NET API.Get started with Azure Batch by running a job from a C# application built on the Azure Batch .NET API. Aplikace odešle několik vstupních datových souborů do služby Azure Storage a potom vytvoří fond výpočetních uzlů služby Batch (virtuálních počítačů).The app uploads several input data files to Azure storage and then creates a pool of Batch compute nodes (virtual machines). Potom vytvoří ukázkovou úlohu, která pomocí základního příkazu spouští úkoly pro zpracování jednotlivých vstupních souborů ve fondu.Then, it creates a sample job that runs tasks to process each input file on the pool using a basic command.

Po dokončení tohoto rychlého startu budete rozumět klíčovým konceptům služby Batch a budete moct službu Batch vyzkoušet ve větším měřítku s úlohami, které víc odpovídají realitě.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.

Diagram znázorňující přehled pracovního postupu aplikace Azure Batch.

PředpokladyPrerequisites

Přihlášení k AzureSign in to Azure

Přihlaste se k webu Azure Portal na adrese https://portal.azure.com.Sign in to the Azure portal at https://portal.azure.com.

Získání přihlašovacích údajů k účtuGet account credentials

V tomto příkladu musíte zadat přihlašovací údaje pro účty služeb Batch a Storage.For this example, you need to provide credentials for your Batch and Storage accounts. Na webu Azure Portal je snadný způsob, jak získat potřebné přihlašovací údaje.A straightforward way to get the necessary credentials is in the Azure portal. (Tyto přihlašovací údaje můžete také získat pomocí rozhraní API Azure nebo nástrojů příkazového řádku.)(You can also get these credentials using the Azure APIs or command-line tools.)

  1. Vyberte všechny služby > Batch účtya potom vyberte název účtu Batch.Select All services > Batch accounts, and then select the name of your Batch account.

  2. Pokud chcete zobrazit přihlašovací údaje dávky, vyberte klíče.To see the Batch credentials, select Keys. Zkopíruje hodnoty Účet Batch, URL a Primární přístupová klíč do textového editoru.Copy the values of Batch account, URL, and Primary access key to a text editor.

  3. Pokud chcete zobrazit název a klíče účtu úložiště, vyberte účet úložiště.To see the Storage account name and keys, select Storage account. Zkopírujte hodnoty Název účtu úložiště a Klíč1 do textového editoru.Copy the values of Storage account name and Key1 to a text editor.

Stažení ukázkyDownload the sample

Stáhněte nebo naklonujte ukázkovou aplikaci z GitHubu.Download or clone the sample app from GitHub. K naklonování úložiště ukázkové aplikace pomocí klienta Git použijte následující příkaz: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

Přejděte do adresáře, který obsahuje soubor řešení sady Visual Studio BatchDotNetQuickstart.sln.Navigate to the directory that contains the Visual Studio solution file BatchDotNetQuickstart.sln.

Otevřete soubor řešení v sadě Visual Studio a aktualizujte řetězce přihlašovacích údajů v souboru Program.cs pomocí hodnot, které jste získali pro své účty.Open the solution file in Visual Studio, and update the credential strings in Program.cs with the values you obtained for your accounts. Příklad: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==";

Poznámka

V zájmu zjednodušení tohoto příkladu se přihlašovací údaje k účtům služeb Batch a Storage zobrazují ve formátu prostého textu.To simplify the example, the Batch and Storage account credentials appear in clear text. V praxi doporučujeme přístup k přihlašovacím údajům omezit a odkazovat na ně v kódu pomocí proměnných prostředí nebo konfiguračního souboru.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. Příklady najdete v úložišti ukázek kódu služby Azure Batch.For examples, see the Azure Batch code samples repo.

Sestavte a spusťte aplikaci.Build and run the app

Pokud chcete vidět pracovní postup služby Batch v praxi, sestavte a spusťte aplikaci v sadě Visual Studio nebo na příkazovém řádku pomocí příkazů dotnet build a dotnet run.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. Po spuštění aplikace se podívejte do kódu a najděte si, co jednotlivé části aplikace dělají.After running the application, review the code to learn what each part of the application does. Příklad pro sadu Visual Studio:For example, in Visual Studio:

  • Klikněte na řešení pravým tlačítkem myši v Průzkumníku řešení a klikněte na Sestavit řešení.Right-click the solution in Solution Explorer, and click Build Solution.

  • Pokud se zobrazí výzva, potvrďte obnovení všech balíčků NuGet.Confirm the restoration of any NuGet packages, if you're prompted. Pokud potřebujete stáhnout chybějící balíčky, ujistěte se, že máte nainstalovaného Správce balíčků NuGet.If you need to download missing packages, ensure the NuGet Package Manager is installed.

Po spuštění ukázkové aplikace vypadá výstup konzoly zhruba následovně.When you run the sample application, the console output is similar to the following. Během provádění dojde k pozastavení na řádku Monitoring all tasks for 'Completed' state, timeout in 00:30:00... a mezitím se spustí výpočetní uzly fondu.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. Jakmile se spustí první výpočetní uzel, úkoly se zařadí do fronty ke spuštění.Tasks are queued to run as soon as the first compute node is running. Pokud chcete monitorovat fond, výpočetní uzly, úlohy a úkoly, můžete přejít na účet Batch v Azure Portal .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...

Po dokončení úkolů se pro každý úkol zobrazí výstup podobný tomu následujícímu: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:
...

Typická doba provádění je přibližně 5 minut, když aplikaci spouštíte ve výchozí konfiguraci.Typical execution time is approximately 5 minutes when you run the application in its default configuration. Nejdelší dobu trvá počáteční vytvoření fondu.Initial pool setup takes the most time. Pokud chcete úlohu znovu spustit, odstraňte úlohu z předchozího spuštění, ale neodstraňujte fond.To run the job again, delete the job from the previous run and do not delete the pool. Ve fondu, který je už nakonfigurovaný, se úloha dokončí za pár sekund.On a preconfigured pool, the job completes in a few seconds.

Kontrola kóduReview the code

Aplikace .NET v tomto rychlém startu provádí tyto kroky:The .NET app in this quickstart does the following:

  • Odešle tři malé textové soubory do kontejneru objektů blob ve vašem účtu služby Azure Storage.Uploads three small text files to a blob container in your Azure storage account. Tyto soubory představují vstup pro zpracování službou Batch.These files are inputs for processing by Batch.
  • Vytvoří fond výpočetních uzlů se systémem Windows Server.Creates a pool of compute nodes running Windows Server.
  • Vytvoří úlohu a tři úkoly ke spuštění v uzlech.Creates a job and three tasks to run on the nodes. Každý úkol zpracovává pomocí příkazového řádku Windows jeden vstupní soubor.Each task processes one of the input files using a Windows command line.
  • Zobrazí soubory vrácené úkoly.Displays files returned by the tasks.

Podrobnosti najdete v souboru Program.cs a v následujících částech.See the file Program.cs and the following sections for details.

Nezbytné úkonyPreliminaries

Za účelem práce s účtem úložiště aplikace použije klientskou knihovnu služby Azure Storage pro .NET.To interact with a storage account, the app uses the Azure Storage Client Library for .NET. Vytvoří odkaz na účet pomocí třídy CloudStorageAccount a z té vytvoří třídu CloudBlobClient.It creates a reference to the account with CloudStorageAccount, and from that creates a CloudBlobClient.

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

Odkaz blobClient slouží aplikaci k vytvoření kontejneru v účtu úložiště a k nahrání datových souborů do tohoto kontejneru.The app uses the blobClient reference to create a container in the storage account and to upload data files to the container. Soubory v úložišti jsou definované jako objekty ResourceFile služby Batch, které může služba Batch později stáhnout do výpočetních uzlů.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));
}

K vytváření a správě fondů, úloh a úkolů ve službě Batch aplikace vytvoří objekt BatchClient.The app creates a BatchClient object to create and manage pools, jobs, and tasks in the Batch service. Klient služby Batch v ukázce používá ověření pomocí sdíleného klíče.The Batch client in the sample uses shared key authentication. (Batch podporuje také ověřování pomocí Azure Active Directory.)(Batch also supports Azure Active Directory authentication.)

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

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

Vytvořte fond výpočetních uzlů.Create a pool of compute nodes

K vytvoření fondu služby Batch aplikace používá metodu BatchClient.PoolOperations.CreatePool, která nastavuje počet uzlů, velikost virtuálních počítačů a konfiguraci fondu.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. Tady objekt VirtualMachineConfiguration určuje odkaz ImageReference na image Windows Serveru publikovanou v Azure Marketplace.Here, a VirtualMachineConfiguration object specifies an ImageReference to a Windows Server image published in the Azure Marketplace. Batch podporuje široké spektrum imagí Linuxu a Windows Serveru v Azure Marketplace, ale i vlastní image virtuálních počítačů.Batch supports a wide range of Linux and Windows Server images in the Azure Marketplace, as well as custom VM images.

Počet uzlů (PoolNodeCount) a velikost virtuálního počítače (PoolVMSize) jsou definované konstanty.The number of nodes (PoolNodeCount) and VM size (PoolVMSize) are defined constants. Ukázka ve výchozím nastavení vytvoří fond se 2 uzly velikosti Standard_A1_v2.The sample by default creates a pool of 2 size Standard_A1_v2 nodes. Navržená velikost nabízí pro tento rychlý příklad dobrou rovnováhu mezi výkonem a náklady.The size suggested offers a good balance of performance versus cost for this quick example.

Metoda Commit odešle fond do služby Batch.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();
    }
...

Vytvoření úlohy BatchCreate a Batch job

Úloha služby Batch je logická skupina jednoho nebo víc úkolů.A Batch job is a logical grouping of one or more tasks. Úloha zahrnuje nastavení společná všem úkolům, jako je priorita a fond, ve kterém se mají úkoly spouštět.A job includes settings common to the tasks, such as priority and the pool to run tasks on. Aplikace vytvoří úlohu ve vašem fondu pomocí metody BatchClient.JobOperations.CreateJob.The app uses the BatchClient.JobOperations.CreateJob method to create a job on your pool.

Metoda Commit odešle úlohu do služby Batch.The Commit method submits the job to the Batch service. Na začátku úloha neobsahuje žádné úkoly.Initially the job has no tasks.

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

    job.Commit();
}
...

Vytváření úlohCreate tasks

Aplikace vytvoří seznam objektů CloudTask.The app creates a list of CloudTask objects. Každý úkol zpracovává vstupní objekt ResourceFile pomocí vlastnosti CommandLine.Each task processes an input ResourceFile object using a CommandLine property. Příkazový řádek v ukázce spustí příkaz Windows type, který zobrazí vstupní soubor.In the sample, the command line runs the Windows type command to display the input file. Tento příkaz představuje jednoduchý příklad pro demonstrační účely.This command is a simple example for demonstration purposes. Při použití služby Batch se aplikace nebo skript zadávají právě na příkazovém řádku.When you use Batch, the command line is where you specify your app or script. Služba Batch poskytuje několik způsobů, jak nasazovat aplikace a skripty do výpočetních uzlů.Batch provides a number of ways to deploy apps and scripts to compute nodes.

Potom aplikace přidá úkoly do úlohy pomocí metody AddTask a ta je zařadí do fronty ke spuštění ve výpočetních uzlech.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);

Zobrazení výstupu úkoluView task output

Aplikace vytvoří položku TaskStateMonitor, která monitoruje úkoly a jejich dokončení.The app creates a TaskStateMonitor to monitor the tasks to make sure they complete. Potom aplikace s využitím vlastnosti CloudTask.ComputeNodeInformation zobrazí soubor stdout.txt vygenerovaný jednotlivými dokončenými úkoly.Then, the app uses the CloudTask.ComputeNodeInformation property to display the stdout.txt file generated by each completed task. V případě úspěšného spuštění úkolu se výstup příkazu úkolu zapíše do souboru stdout.txt: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());
}

Vyčištění prostředkůClean up resources

Aplikace automaticky odstraní kontejner úložiště, který vytvoří, a dá vám možnost odstranit fond a úlohu služby Batch.The app automatically deletes the storage container it creates, and gives you the option to delete the Batch pool and job. Poplatky se účtují za fond, ve kterém jsou spuštěné uzly, i když nejsou naplánované žádné úlohy.You are charged for the pool while the nodes are running, even if no jobs are scheduled. Až fond nebudete potřebovat, odstraňte ho.When you no longer need the pool, delete it. Při odstranění fondu se odstraní veškeré výstupy úkolů v uzlech.When you delete the pool, all task output on the nodes is deleted.

Pokud už je nepotřebujete, odstraňte skupinu prostředků, účet Batch a účet úložiště.When no longer needed, delete the resource group, Batch account, and storage account. Na webu Azure Portal to provedete tak, že vyberete skupinu prostředků účtu Batch a kliknete na Odstranit skupinu prostředků.To do so in the Azure portal, select the resource group for the Batch account and click Delete resource group.

Další krokyNext steps

V tomto rychlém startu jste spustili malou aplikaci sestavenou pomocí rozhraní API .NET služby Batch a ta vytvořila fond a úlohu služby Batch.In this quickstart, you ran a small app built using the Batch .NET API to create a Batch pool and a Batch job. Úloha spustila ukázkové úkoly a stáhla výstup vytvořený v uzlech.The job ran sample tasks, and downloaded output created on the nodes. Teď chápete klíčové koncepty služby Batch a můžete službu Batch vyzkoušet ve větším měřítku s úlohami, které víc odpovídají realitě.Now that you understand the key concepts of the Batch service, you are ready to try Batch with more realistic workloads at larger scale. Další informace o službě Azure Batch a vysvětlení paralelních úloh v reálné aplikaci najdete v kurzu o rozhraní .NET služby Batch.To learn more about Azure Batch, and walk through a parallel workload with a real-world application, continue to the Batch .NET tutorial.