Schnellstart: Ausführen Ihres ersten Azure Batch-Auftrags mit der .NET-APIQuickstart: Run your first Azure Batch job with the .NET API

In dieser Schnellstartanleitung wird ein Azure Batch-Auftrag über eine C#-Anwendung ausgeführt, die auf der Azure Batch .NET-API basiert.This quickstart runs an Azure Batch job from a C# application built on the Azure Batch .NET API. Die App lädt einige Eingabedatendateien in den Azure-Speicher und erstellt anschließend einen Pool mit Batch-Computeknoten (virtuelle Computer).The app uploads several input data files to Azure storage and then creates a pool of Batch compute nodes (virtual machines). Als Nächstes wird ein Beispiel für einen Auftrag erstellt, mit dem Aufgaben ausgeführt werden, um die einzelnen Eingabedateien im Pool mit einem einfachen Befehl zu verarbeiten.Then, it creates a sample job that runs tasks to process each input file on the pool using a basic command. Nach Abschluss dieser Schnellstartanleitung sind Sie mit den wichtigsten Konzepten des Batch-Diensts vertraut und können Batch mit realistischeren Workloads und in größerem Umfang ausprobieren.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.

Schnellstart – App-Workflow

Wenn Sie kein Azure-Abonnement besitzen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.If you don't have an Azure subscription, create a free account before you begin.

VoraussetzungenPrerequisites

Anmelden bei AzureSign in to Azure

Melden Sie sich unter https://portal.azure.com beim Azure-Portal an.Sign in to the Azure portal at https://portal.azure.com.

Abrufen der KontoanmeldeinformationenGet account credentials

In diesem Beispiel müssen Sie Anmeldeinformationen für Ihr Batch- und Ihr Storage-Konto angeben.For this example, you need to provide credentials for your Batch and Storage accounts. Die erforderlichen Anmeldeinformationen können Sie ganz einfach über das Azure-Portal abrufen.A straightforward way to get the necessary credentials is in the Azure portal. (Sie können aber auch die Azure-APIs oder Befehlszeilentools verwenden, um die Anmeldeinformationen abzurufen.)(You can also get these credentials using the Azure APIs or command-line tools.)

  1. Wählen Sie Alle Dienste > Batch-Konten und anschließend den Namen Ihres Batch-Kontos aus.Select All services > Batch accounts, and then select the name of your Batch account.

  2. Wählen Sie zum Anzeigen der Batch-Anmeldeinformationen Schlüssel aus.To see the Batch credentials, select Keys. Kopieren Sie die Werte für Batch-Konto, URL und Primärer Zugriffsschlüssel in einen Texteditor.Copy the values of Batch account, URL, and Primary access key to a text editor.

  3. Wählen Sie zum Anzeigen des Namens und der Schlüssel für das Storage-Konto auf Speicherkonto aus.To see the Storage account name and keys, select Storage account. Kopieren Sie die Werte für Speicherkontoname und Schlüssel1 in einen Texteditor.Copy the values of Storage account name and Key1 to a text editor.

Herunterladen des BeispielsDownload the sample

Laden Sie die Beispiel-App von GitHub herunter, oder klonen Sie sie.Download or clone the sample app from GitHub. Verwenden Sie den folgenden Befehl, um das Beispiel-App-Repository mit einem Git-Client zu klonen: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

Navigieren Sie zu dem Verzeichnis, in dem die Visual Studio-Projektmappendatei BatchDotNetQuickstart.sln enthalten ist.Navigate to the directory that contains the Visual Studio solution file BatchDotNetQuickstart.sln.

Öffnen Sie die Projektmappendatei in Visual Studio, und aktualisieren Sie die Zeichenfolgen mit den Anmeldeinformationen in Program.cs mit den Werten für Ihre Konten.Open the solution file in Visual Studio, and update the credential strings in Program.cs with the values you obtained for your accounts. Beispiel: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==";

Hinweis

Zur Vereinfachung des Beispiels sind die Anmeldeinformationen für das Batch- und Storage-Konto in Klartext angegeben.To simplify the example, the Batch and Storage account credentials appear in clear text. Für die Praxis empfehlen wir Ihnen, den Zugriff auf die Anmeldeinformationen zu beschränken und im Code darauf zu verweisen, indem Sie Umgebungsvariablen oder eine Konfigurationsdatei verwenden.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. Beispiele hierfür finden Sie im Repository mit den Codebeispielen für Azure Batch.For examples, see the Azure Batch code samples repo.

Erstellen und Ausführen der AppBuild and run the app

Um den Batch-Workflow in Aktion zu sehen, können Sie die Anwendung in Visual Studio oder über die Befehlszeile mit den Befehlen dotnet build und dotnet run erstellen und ausführen.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. Sehen Sie sich nach dem Ausführen der Anwendung den Code an, um zu erfahren, welche Aufgabe die einzelnen Teile der Anwendung jeweils haben.After running the application, review the code to learn what each part of the application does. In Visual Studio:For example, in Visual Studio:

  • Klicken Sie mit der rechten Maustaste im Projektmappen-Explorer auf die Projektmappe, und klicken Sie dann auf Projektmappe erstellen.Right-click the solution in Solution Explorer, and click Build Solution.

  • Bestätigen Sie die Wiederherstellung von NuGet-Paketen, wenn Sie hierzu aufgefordert werden.Confirm the restoration of any NuGet packages, if you're prompted. Stellen Sie beim Herunterladen von fehlenden Paketen sicher, dass der NuGet-Paket-Manager installiert ist.If you need to download missing packages, ensure the NuGet Package Manager is installed.

Führen Sie ihn anschließend aus.Then run it. Beim Ausführen der Beispielanwendung sieht die Konsolenausgabe in etwa wie folgt aus:When you run the sample application, the console output is similar to the following. Bei der Ausführung kommt es bei Monitoring all tasks for 'Completed' state, timeout in 00:30:00... zu einer Pause, während die Computeknoten des Pools gestartet werden.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. Die Aufgaben werden in die Warteschlange eingereiht und dann ausgeführt, sobald der erste Computeknoten aktiv ist.Tasks are queued to run as soon as the first compute node is running. Navigieren Sie im Azure-Portal zu Ihrem Batch-Konto, um den Pool, die Computeknoten, den Auftrag und die Aufgaben zu überwachen.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...

Nach Abschluss der einzelnen Aufgaben wird dazu jeweils die Ausgabe angezeigt, die in etwa wie folgt aussieht: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:
...

Die normale Ausführungsdauer beträgt ca. fünf Minuten, wenn die Anwendung in der Standardkonfiguration ausgeführt wird.Typical execution time is approximately 5 minutes when you run the application in its default configuration. Am meisten Zeit nimmt die anfängliche Einrichtung des Pools ein.Initial pool setup takes the most time. Löschen Sie den Auftrag aus der vorherigen Ausführung, aber löschen Sie nicht den Pool, um den Auftrag erneut auszuführen.To run the job again, delete the job from the previous run and do not delete the pool. In einem vorkonfigurierten Pool wird der Auftrag innerhalb einiger Sekunden abgeschlossen.On a preconfigured pool, the job completes in a few seconds.

Überprüfen des CodesReview the code

Mit der .NET-App in dieser Schnellstartanleitung werden folgende Schritte ausgeführt:The .NET app in this quickstart does the following:

  • Es werden drei kleine Textdateien in einen Blobcontainer in Ihrem Azure-Speicherkonto hochgeladen.Uploads three small text files to a blob container in your Azure storage account. Diese Dateien dienen als Eingaben für die Verarbeitung mit Batch.These files are inputs for processing by Batch.
  • Es wird ein Pool mit Computeknoten erstellt, auf denen Windows Server ausgeführt wird.Creates a pool of compute nodes running Windows Server.
  • Es werden ein Auftrag und drei Aufgaben für die Ausführung auf den Knoten erstellt.Creates a job and three tasks to run on the nodes. Jede Aufgabe verarbeitet eine der Eingabedateien über eine Windows-Befehlszeile.Each task processes one of the input files using a Windows command line.
  • Es werden die von den Aufgaben zurückgegebenen Dateien angezeigt.Displays files returned by the tasks.

Ausführliche Informationen finden Sie in der Datei Program.cs und in den folgenden Abschnitten.See the file Program.cs and the following sections for details.

Vorbereitende MaßnahmenPreliminaries

Zum Interagieren mit einem Speicherkonto verwendet die App die Azure Storage-Clientbibliothek für .NET.To interact with a storage account, the app uses the Azure Storage Client Library for .NET. Sie erstellt einen Verweis auf das Konto mit CloudStorageAccount und auf dieser Grundlage ein CloudBlobClient-Element.It creates a reference to the account with CloudStorageAccount, and from that creates a CloudBlobClient.

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

Die App verwendet den blobClient-Verweis, um im Speicherkonto einen Container zu erstellen und Datendateien in den Container hochzuladen.The app uses the blobClient reference to create a container in the storage account and to upload data files to the container. Die Dateien im Speicher werden als Batch-ResourceFile-Objekte definiert, die von Batch später auf Computeknoten heruntergeladen werden können.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));
}

Die App erstellt ein BatchClient-Objekt zum Erstellen und Verwalten von Pools, Aufträgen und Aufgaben im Batch-Dienst.The app creates a BatchClient object to create and manage pools, jobs, and tasks in the Batch service. Für den Batch-Client im Beispiel wird die Authentifizierung mit gemeinsam verwendetem Schlüssel genutzt.The Batch client in the sample uses shared key authentication. (Batch unterstützt auch die Azure Active Directory-Authentifizierung.)(Batch also supports Azure Active Directory authentication.)

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

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

Erstellen eines Pools mit ComputeknotenCreate a pool of compute nodes

Zum Erstellen eines Batch-Pools verwendet die App die BatchClient.PoolOperations.CreatePool-Methode, um die Anzahl von Knoten, die VM-Größe und eine Poolkonfiguration festzulegen.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. Hier gibt ein VirtualMachineConfiguration-Objekt einen ImageReference-Verweis auf ein Windows Server-Image an, das im Azure Marketplace veröffentlicht wurde.Here, a VirtualMachineConfiguration object specifies an ImageReference to a Windows Server image published in the Azure Marketplace. Batch unterstützt viele verschiedene Linux- und Windows Server-Images im Azure Marketplace und außerdem benutzerdefinierte VM-Images.Batch supports a wide range of Linux and Windows Server images in the Azure Marketplace, as well as custom VM images.

Die Anzahl von Knoten (PoolNodeCount) und die VM-Größe (PoolVMSize) sind definierte Konstanten.The number of nodes (PoolNodeCount) and VM size (PoolVMSize) are defined constants. Im Beispiel wird standardmäßig ein Pool mit zwei Knoten der Größe Standard_A1_v2 erstellt.The sample by default creates a pool of 2 size Standard_A1_v2 nodes. Die vorgeschlagene Größe bietet für dieses kurze Beispiel eine gute Balance zwischen Leistung und Kosten.The size suggested offers a good balance of performance versus cost for this quick example.

Mit der Commit-Methode wird der Pool an den Batch-Dienst übermittelt.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();
    }
...

Erstellen eines Batch-AuftragsCreate a Batch job

Ein Batch-Auftrag ist eine logische Gruppierung für eine oder mehrere Aufgaben.A Batch job is a logical grouping of one or more tasks. Ein Auftrag enthält gemeinsame Einstellungen für Aufgaben, z.B. die Priorität und den Pool zum Ausführen von Aufgaben.A job includes settings common to the tasks, such as priority and the pool to run tasks on. Die App verwendet die BatchClient.JobOperations.CreateJob-Methode zum Erstellen eines Auftrags in Ihrem Pool.The app uses the BatchClient.JobOperations.CreateJob method to create a job on your pool.

Mit der Commit-Methode wird der Auftrag an den Batch-Dienst übermittelt.The Commit method submits the job to the Batch service. Der Auftrag enthält ursprünglich keine Aufgaben.Initially the job has no tasks.

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

    job.Commit();
}
...

Erstellen von AufgabenCreate tasks

Die App erstellt eine Liste mit CloudTask-Objekten.The app creates a list of CloudTask objects. Jede Aufgabe verarbeitet ein ResourceFile-Eingabeobjekt mit einer CommandLine-Eigenschaft.Each task processes an input ResourceFile object using a CommandLine property. Im Beispiel führt die Befehlszeile den Windows-Befehl type aus, um die Eingabedatei anzuzeigen.In the sample, the command line runs the Windows type command to display the input file. Dieser Befehl ist ein einfaches Beispiel für Demonstrationszwecke.This command is a simple example for demonstration purposes. Bei Verwendung von Batch befindet sich die Befehlszeile dort, wo Sie Ihre App bzw. Ihr Skript angeben.When you use Batch, the command line is where you specify your app or script. In Batch gibt es mehrere Möglichkeiten, Apps und Skripts auf Computeknoten bereitzustellen.Batch provides a number of ways to deploy apps and scripts to compute nodes.

Anschließend fügt die App dem Auftrag mit der AddTask-Methode Aufgaben hinzu, mit der diese für die Ausführung auf den Computeknoten in die Warteschlange eingereiht werden.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);

Anzeigen der AufgabenausgabeView task output

Die App erstellt ein TaskStateMonitor-Element, um die Aufgaben zu überwachen und sicherzustellen, dass sie abgeschlossen werden.The app creates a TaskStateMonitor to monitor the tasks to make sure they complete. Anschließend verwendet die App die CloudTask.ComputeNodeInformation-Eigenschaft, um die Datei stdout.txt anzuzeigen, die von abgeschlossenen Aufgaben jeweils generiert wird.Then, the app uses the CloudTask.ComputeNodeInformation property to display the stdout.txt file generated by each completed task. Wenn die Aufgabe erfolgreich ausgeführt wurde, wird die Ausgabe des Aufgabenbefehls in stdout.txt geschrieben: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());
}

Bereinigen von RessourcenClean up resources

Von der App wird der erstellte Speichercontainer automatisch gelöscht, und Sie erhalten die Möglichkeit, den Batch-Pool und -Auftrag zu löschen.The app automatically deletes the storage container it creates, and gives you the option to delete the Batch pool and job. Ihnen werden während der Ausführung der Knoten auch dann Gebühren für den Pool berechnet, wenn keine Aufträge geplant sind.You are charged for the pool while the nodes are running, even if no jobs are scheduled. Es ist ratsam, den Pool zu löschen, wenn Sie ihn nicht mehr benötigen.When you no longer need the pool, delete it. Beim Löschen des Pools werden alle Aufgabenausgaben auf den Knoten gelöscht.When you delete the pool, all task output on the nodes is deleted.

Löschen Sie die Ressourcengruppe, das Batch-Konto und das Speicherkonto, wenn diese Elemente nicht mehr benötigt werden.When no longer needed, delete the resource group, Batch account, and storage account. Wählen Sie hierzu im Azure-Portal die Ressourcengruppe für das Batch-Konto aus, und klicken Sie auf Ressourcengruppe löschen.To do so in the Azure portal, select the resource group for the Batch account and click Delete resource group.

Nächste SchritteNext steps

In dieser Schnellstartanleitung haben Sie eine kleine App ausgeführt, indem Sie die Batch .NET-API verwendet haben, um einen Batch-Pool und einen Batch-Auftrag zu erstellen.In this quickstart, you ran a small app built using the Batch .NET API to create a Batch pool and a Batch job. Im Auftrag wurden Beispielaufgaben ausgeführt, und es wurde die auf den Knoten erstellte Ausgabe heruntergeladen.The job ran sample tasks, and downloaded output created on the nodes. Da Sie sich jetzt mit den wichtigsten Konzepten des Batch-Diensts vertraut gemacht haben, können Sie Batch mit realistischeren Workloads und in größerem Umfang ausprobieren.Now that you understand the key concepts of the Batch service, you are ready to try Batch with more realistic workloads at larger scale. Fahren Sie mit dem Batch .NET-Tutorial fort, um weitere Informationen zu Azure Batch und eine Schritt-für-Schritt-Anleitung zu einer parallelen Workload mit einer Anwendung aus der Praxis zu erhalten.To learn more about Azure Batch, and walk through a parallel workload with a real-world application, continue to the Batch .NET tutorial.

Tutorial: Run a parallel workload with Azure Batch using the .NET API (Tutorial: Ausführen einer parallelen Workload mit Azure Batch per .NET-API)Process a parallel workload with .NET