Snelstartgids: Uw eerste Azure Batch-taak uitvoeren met .NET API
Ga aan de slag met Azure Batch door een taak uit te voeren vanuit een C#-app die is ontworpen met behulp van de Azure Batch .NET API. Met de app worden verschillende invoerbestanden geüpload naar Azure-opslag en wordt vervolgens een pool met Batch-rekenknooppunten (virtuele machines) gemaakt. Vervolgens wordt een Batch-voorbeeldtaak gemaakt waarmee taken worden uitgevoerd om elk invoerbestand in de pool te verwerken met behulp van een basisopdracht.
Nadat u deze quickstart hebt voltooid, begrijpt u de belangrijkste principes van de Batch-service en bent u er klaar voor om Batch op grotere schaal te gebruiken voor meer realistische workloads.

Vereisten
Een Azure-account met een actief abonnement. Gratis een account maken
Een Batch-account en een gekoppeld Azure Storage-account. Raadpleeg de Batch-quickstarts met behulp van Azure Portal of Azure CLI voor instructies voor het maken van deze accounts.
Visual Studio 2017 of hoger, of .NET Core 2.1 SDK voor Linux, macOS of Windows.
Aanmelden bij Azure
Meld u aan bij de Azure Portal op https://portal.azure.com.
Accountreferenties ophalen
In dit voorbeeld moet u referenties opgeven voor uw Batch- en Storage-accounts. U kunt de referenties eenvoudig ophalen in Azure Portal. (U kunt deze referenties ook ophalen met de Azure-API's of de opdrachtregelprogramma's.)
Selecteer Alle services > Batch-accounts en selecteer vervolgens de naam van uw Batch-account.
Selecteer Sleutels om de Batch-referenties te zien. Kopieer de waarden van Batch-account, URL en Primaire toegangssleutel in een teksteditor.
Selecteer Opslagaccount als u de naam en sleutels van het opslagaccount wilt zien. Kopieer de waarden van Naam van opslagaccount en Key1 in een teksteditor.
Het voorbeeld downloaden
Download of kloon de voorbeeld-app vanuit GitHub. Als u de opslagplaats van de voorbeeld-app wilt klonen met een Git-client, gebruikt u de volgende opdracht:
git clone https://github.com/Azure-Samples/batch-dotnet-quickstart.git
Ga naar de map met het Visual Studio-oplossingsbestand BatchDotNetQuickstart.sln.
Open het oplossingsbestand in Visual Studio en werk de referentietekenreeksen in Program.cs bij met de waarden die u hebt verkregen voor uw accounts. Bijvoorbeeld:
// 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==";
Notitie
Ter vereenvoudiging van het voorbeeld worden de Batch- en Storage-accountreferenties in niet-versleutelde tekst weergegeven. In de praktijk wordt aangeraden dat u de toegang tot de referenties beperkt en hiernaar verwijst in uw code met behulp van omgevingsvariabelen of een configuratiebestand. Zie de codevoorbeelden-opslagplaats van Azure Batch voor voorbeelden.
De app bouwen en uitvoeren
Als u de Batch-werkstroom in actie wilt zien, bouwt u de toepassing in Visual Studio en voert u deze uit. U kunt ook de opdrachtregel gebruiken met de opdrachten dotnet build en dotnet run. Nadat de toepassing is uitgevoerd, bekijkt u de code voor meer informatie over wat elk onderdeel van de toepassing doet. Dit kan bijvoorbeeld als volgt in Visual Studio:
Klik met de rechtermuisknop op de oplossing in Solution Explorer en klik op Build-oplossing.
Bevestig het herstel van alle NuGet-pakketten als dit wordt gevraagd. Als u ontbrekende pakketten wilt downloaden, zorgt u ervoor dat NuGet-pakketbeheer is geïnstalleerd.
Wanneer u de voorbeeldtoepassing uitvoert, ziet de uitvoer van de console er ongeveer als volgt uit. De actieve uitvoering wordt bij Monitoring all tasks for 'Completed' state, timeout in 00:30:00... onderbroken terwijl de rekenknooppunten van de pool worden gestart. Taken worden in de wachtrij geplaatst om te worden uitgevoerd zodra het eerste rekenknooppunt actief is. Ga naar uw Batch-account in Azure Portal om de pool, rekenknooppunten en taken te controleren.
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...
Nadat taken zijn voltooid, ziet u uitvoer voor elke taak die er ongeveer als volgt uitziet:
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:
...
Wanneer u de toepassing uitvoert in de standaardconfiguratie, bedraagt de uitvoeringstijd doorgaans ongeveer 5 minuten. De eerste keer dat u de pool instelt, neemt dit de meeste tijd in beslag. Als u de taak opnieuw wilt uitvoeren, verwijdert u de taak uit de vorige run en verwijdert u de pool niet. Bij een vooraf geconfigureerde pool is de taak binnen een paar seconden voltooid.
De code bekijken
Met de .NET-app in deze snelstartgids worden de volgende bewerkingen uitgevoerd:
- Er worden drie kleine tekstbestanden geüpload naar een blobcontainer in het Azure-opslagaccount. Deze bestanden bevatten invoergegevens voor verwerking met Batch.
- Er wordt een pool met rekenknooppunten gemaakt waarop Windows Server wordt uitgevoerd.
- Er wordt een Batch-taak gemaakt, plus drie taken die moeten worden uitgevoerd op de knooppunten. Met elke taak wordt een van de invoerbestanden verwerkt met behulp van een Windows-opdrachtregel.
- Er worden bestanden weergegeven die zijn geretourneerd met de taken.
Bekijk het bestand Program.cs en de volgende secties voor de details.
Voorbereidingen
De app gebruikt de Azure Storage-clientbibliotheek voor .NET om te kunnen werken met een opslagaccount. Er wordt een verwijzing naar het account gemaakt met CloudStorageAccount en van hieruit wordt een CloudBlobClient gemaakt.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
De app gebruikt de blobClient-verwijzing om een container te maken in het opslagaccount en om gegevensbestanden naar de container te uploaden. De bestanden in de opslag zijn gedefinieerd als Batch ResourceFile-objecten die later met Batch kunnen worden gedownload op rekenknooppunten.
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));
}
De app maakt een BatchClient-object om pools, jobs en taken in de Batch-service te maken en te beheren. De Batch-client in het voorbeeld gebruikt verificatie op basis van gedeelde sleutels. (Batch ondersteunt ook Azure Active Directory-verificatie.)
BatchSharedKeyCredentials cred = new BatchSharedKeyCredentials(BatchAccountUrl, BatchAccountName, BatchAccountKey);
using (BatchClient batchClient = BatchClient.Open(cred))
...
Een pool met rekenknooppunten maken
Voor het maken van een Batch-pool gebruikt de app de BatchClient.PoolOperations.CreatePool-methode om het aantal knooppunten, de VM-grootte en de poolconfiguratie in te stellen. Hier geeft het object VirtualMachineConfiguration een ImageReference op naar een Windows Server-installatiekopie die is gepubliceerd in de Azure Marketplace. Batch ondersteunt diverse Linux- en Windows Server-installatiekopieën in Azure Marketplace, evenals aangepaste VM-installatiekopieën.
Het aantal knooppunten (PoolNodeCount) en de VM-grootte (PoolVMSize) zijn gedefinieerde constanten. In het voorbeeld wordt standaard een pool van twee Standard_A1_v2 gemaakt. De voorgestelde grootte in dit snelle voorbeeld biedt een goede balans tussen prestaties en kosten.
Met de Commit-methode wordt de pool naar de Batch-service verzonden.
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();
}
...
Een Batch-taak maken
Een Batch-taak is een logische groep met een of meer taken. Een Batch-taak omvat instellingen die gemeenschappelijk zijn voor de taken, zoals prioriteit en de pool waarop taken moeten worden uitgevoerd. De app gebruikt de BatchClient.JobOperations.CreateJob-methode om een Batch-taak te maken in de pool.
Met de Commit-methode wordt de taak naar de Batch-service verzonden. De Batch-taak heeft in eerste instantie geen taken.
try
{
CloudJob job = batchClient.JobOperations.CreateJob();
job.Id = JobId;
job.PoolInformation = new PoolInformation { PoolId = PoolId };
job.Commit();
}
...
Taken maken
De app maakt een lijst met CloudTask-objecten. Met elke taak wordt een ResourceFile-invoerobject verwerkt met behulp van een eigenschap CommandLine. In het voorbeeld wordt met de opdrachtregel de opdracht type voor Windows uitgevoerd om het invoerbestand weer te geven. Deze opdracht is een eenvoudig voorbeeld voor demonstratiedoeleinden. Wanneer u Batch gebruikt, geeft u uw app of script op de opdrachtregel op. Batch biedt verschillende manieren om apps en scripts te implementeren op rekenknooppunten.
Vervolgens worden met de app taken toegevoegd aan de Batch-taak met behulp van de AddTask-methode. Deze methode plaatst de taken in een wachtrij voor uitvoering op de rekenknooppunten.
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);
Taakuitvoer weergeven
De app maakt een TaskStateMonitor om te controleren of de taken worden voltooid. Vervolgens gebruikt de app de eigenschap CloudTask.ComputeNodeInformation om het stdout.txt-bestand weer te geven dat wordt gegenereerd na elke voltooide taak. Wanneer de taak is voltooid, wordt de uitvoer van de taakopdracht geschreven naar 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());
}
Resources opschonen
De gemaakte opslagcontainer wordt automatisch verwijderd met de app en u krijgt de mogelijkheid de Batch-pool en -taak te verwijderen. Er worden kosten berekend voor de pool zolang de knooppunten actief zijn, zelfs als er geen taken zijn gepland. Verwijder de pool wanneer u deze niet meer nodig hebt. Nadat u de pool hebt verwijderd, wordt alle taakuitvoer op de knooppunten verwijderd.
Verwijder de resourcegroep, het Batch-account en het opslagaccount wanneer u deze niet meer nodig hebt. Hiervoor selecteert u in Azure Portal de resourcegroep voor het Batch-account en klikt u op Resourcegroep verwijderen.
Volgende stappen
In deze snelstartgids hebt u een kleine app gebouwd met behulp van de Batch .NET API om een Batch-pool en een Batch-taak te maken. Met de taak zijn voorbeeldtaken uitgevoerd, en u hebt de uitvoer van de knooppunten gedownload. Nu u de belangrijkste concepten van de Batch-service begrijpt, kunt u Batch op grotere schaal proberen met meer realistische workloads. Ga verder met de Batch .NET-zelfstudie voor meer informatie over Azure Batch en een stapsgewijze uitleg over een parallelle workload met een toepassing uit de praktijk.