Démarrage rapide : utiliser .NET pour créer un pool Batch, puis exécuter un travail
Article
Ce guide de démarrage rapide vous montre comment commencer à utiliser Azure Batch en exécutant une application C# qui utilise l’API Azure Batch .NET. L’application .NET :
Charge plusieurs fichiers de données d’entrée dans un conteneur d’objets blob Stockage Azure à utiliser pour le traitement des tâches Batch.
Crée un pool de deux machines virtuelles, ou nœuds de calcul, exécutant Windows Server.
Crée un travail qui exécute des tâches sur les nœuds pour traiter chaque fichier d’entrée à l’aide d’une ligne de commande Windows.
Affiche les fichiers de sortie que les tâches retournent.
À l’issue de ce guide de démarrage rapide, vous maîtriserez les concepts clés du service Batch et serez prêt à utiliser Batch avec des charges de travail plus réalistes à plus grande échelle.
Pour effectuer ce démarrage rapide, téléchargez ou clonez l’application, fournissez les valeurs des comptes, compilez, puis exécutez l’application, puis vérifiez la sortie.
Télécharger ou cloner l’application
Téléchargez ou clonez l’application Azure Batch .NET Quickstart depuis GitHub. Utilisez la commande ci-dessous pour cloner le référentiel d’application avec un client Git :
L’application doit utiliser les noms de vos comptes Batch et de stockage, les valeurs de clé de compte et le point de terminaison de compte Batch. Vous pouvez obtenir ces informations à partir du portail Azure, des API Azure ou des outils de ligne de commande.
Pour obtenir les informations sur vos comptes à partir du portail Azure :
Dans la barre recherche Azure, recherchez et sélectionnez le nom de votre compte Batch.
Sur la page de votre compte Batch, sélectionnez Clés dans le volet de navigation de gauche.
Sur la page Clés, copiez les valeurs suivantes :
Compte Batch
Point de terminaison de compte
Clé d’accès primaire
Nom du compte de stockage
Key1
Accédez à votre dossier batch-dotnet-quickstart téléchargé, puis modifiez les chaînes d’informations d’identification dans Program.cs pour fournir les valeurs que vous avez copiées :
L’exposition des clés de compte dans la source de l’application n’est pas recommandée pour l’utilisation en production. Vous devez restreindre l’accès aux informations d’identification et y faire référence dans votre code à l’aide de variables ou d’un fichier de configuration. Il est préférable de stocker les clés de compte Batch et de stockage dans Azure Key Vault.
Compiler, puis exécuter l’application, puis afficher la sortie
Pour afficher le flux de travail Batch en action, compilez, puis exécutez l’application. Vous pouvez également utiliser la ligne de commande dotnet build et les commandes dotnet run.
Dans Visual Studio :
Ouvrez le fichier BatchDotNetQuickstart.sln, cliquez avec le bouton droit sur la solution dans Explorateur de solutions, puis sélectionnez Compiler. Si vous y êtes invité, utilisez le Gestionnaire de package NuGet pour mettre à jour ou restaurer des packages NuGet.
Une fois la compilation terminée, sélectionnez BatchDotNetQuickstart dans la barre de menus supérieure pour exécuter l’application.
Le temps d’exécution standard avec la configuration par défaut est d’environ cinq minutes. La configuration initial des nœuds du pool prend le plus de temps. Pour réexécuter le travail, supprimez-le de l’exécution précédente mais ne supprimez pas le pool. Sur un pool préconfiguré, le travail se termine en quelques secondes.
L’application retourne un résultat semblable à l’exemple suivant :
Output
Sample start: 11/16/2022 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...
Il y a une pause dans Monitoring all tasks for 'Completed' state, timeout in 00:30:00... au moment où les nœuds de calcul du pool démarrent. À mesure que les tâches sont créées, Batch les met en file d’attente pour qu’elles s’exécutent sur le pool. Dès que le premier nœud de calcul est disponible, la première tâche s’exécute sur le nœud. Vous pouvez surveiller l’état des nœuds, des tâches et des travaux à partir de la page de votre compte Batch dans le portail Azure.
Une fois chaque tâche terminée, vous voyez une sortie similaire à l’exemple suivant :
Output
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...
stderr:
...
Créer des clients de service et charger des fichiers de ressources
Pour interagir avec le compte de stockage, l’application utilise la bibliothèque de client Azure Storage Blob pour .NET afin de créer un BlobServiceClient.
C#
var sharedKeyCredential = new StorageSharedKeyCredential(storageAccountName, storageAccountKey);
string blobUri = "https://" + storageAccountName + ".blob.core.windows.net";
var blobServiceClient = new BlobServiceClient(new Uri(blobUri), sharedKeyCredential);
return blobServiceClient;
L’application utilise la référence blobServiceClient pour créer un conteneur dans le compte de stockage, ainsi que pour charger des fichiers de données dans le conteneur. Les fichiers de stockage sont définis en tant qu’objets Batch ResourceFile que Batch peut télécharger ultérieurement sur les nœuds de calcul.
C#
List<string> inputFilePaths = new()
{
"taskdata0.txt",
"taskdata1.txt",
"taskdata2.txt"
};
var inputFiles = new List<ResourceFile>();
foreach (var filePath in inputFilePaths)
{
inputFiles.Add(UploadFileToContainer(containerClient, inputContainerName, filePath));
}
L’application crée un objet BatchClient pour créer, puis gérer des pools, des travaux et des tâches. Le client Batch utilise l’authentification par clé partagée. Batch prend également en charge l'authentification Microsoft Entra.
C#
var cred = new BatchSharedKeyCredentials(BatchAccountUrl, BatchAccountName, BatchAccountKey);
using BatchClient batchClient = BatchClient.Open(cred);
...
Créer un pool de nœuds de calcul
Pour créer un pool Batch, l’application utilise la méthode BatchClient.PoolOperations.CreatePool pour définir le nombre de nœuds, la taille de machine virtuelle et la configuration du pool. L’objet VirtualMachineConfiguration suivant spécifie une référence ImageReference sur une image Windows Server publiée dans la Place de marché. Batch prend en charge une large plage d’images Windows Server et Linux dans la Place de marché, ainsi que les images de machines virtuelles personnalisées.
L’élément PoolNodeCount et la taille de machine virtuelle PoolVMSize sont des constantes définies. L’application crée un pool de deux nœuds de taille Standard_A1_v2. Cette taille offre un bon compromis entre performance et coût dans ce guide de démarrage rapide.
La méthode Commit soumet le pool au service Batch.
Un travail Batch est un regroupement logique d’une ou de plusieurs tâches. Le travail inclut les paramètres communs aux tâches, tels que la priorité et le pool pour exécuter les tâches.
L’application utilise la méthode BatchClient.JobOperations.CreateJob pour créer un travail sur votre pool. La méthode Commit soumet le travail au service Batch. Dans un premier temps, le travail n’a aucune tâche.
Azure Batch fournit plusieurs façons de déployer des applications et des scripts sur des nœuds de calcul. L’application crée une liste d’objets CloudTask d’entrée ResourceFile. Chaque tâche traite un fichier d’entrée à l’aide d’une propriété CommandLine. La ligne de commande Batch se trouve là où vous spécifiez votre application ou votre script.
La ligne de commande dans le code suivant exécute la commande Windows type pour afficher les fichiers d’entrée. Ensuite, l’application ajoute chaque tâche au travail avec la méthode AddTask, qui met en file d’attente la tâche à exécuter sur les nœuds de calcul.
C#
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);
var task = new CloudTask(taskId, taskCommandLine)
{
ResourceFiles = new List<ResourceFile> { inputFiles[i] }
};
tasks.Add(task);
}
batchClient.JobOperations.AddTask(JobId, tasks);
Afficher la sortie des tâches
L’application crée un TaskStateMonitor pour surveiller les tâches, puis vérifier qu’elles se terminent. Lorsque chaque tâche s’exécute correctement, sa sortie s’écrit dans stdout.txt. L’application utilise ensuite la propriété CloudTask.ComputeNodeInformation pour afficher le fichier stdout.txt de chaque tâche terminée.
L’application supprime automatiquement le conteneur de stockage créé et vous donne la possibilité de supprimer le travail et le pool Azure Batch. Les pools et les nœuds entraînent des frais pendant l’exécution des nœuds, même s’ils n’exécutent pas de travaux. Si vous n’avez plus besoin du pool, supprimez-le.
Quand vous n’avez plus besoin de votre compte Batch et de votre compte de stockage, vous pouvez supprimer le groupe de ressources qui les contient. Dans le portail Azure, sélectionnez Supprimer le groupe de ressources en haut de la page du groupe de ressources. Dans l’écran Supprimer un groupe de ressources, entrez le nom du groupe de ressources concerné, puis sélectionnez Supprimer.
Étapes suivantes
Dans ce guide de démarrage rapide, vous avez exécuté une application qui utilise l’API Batch .NET pour créer un pool, des nœuds, un travail et des tâches Batch. Le travail a chargé des fichiers de ressources dans un conteneur de stockage, exécuté des tâches sur les nœuds et affiché la sortie des nœuds.
Maintenant que vous maîtrisez les concepts clés du service Batch, vous êtes prêt à utiliser Azure Batch avec des charges de travail plus réalistes à plus grande échelle. Si vous souhaitez en savoir plus sur Azure Batch et parcourir une charge de travail parallèle avec une application réelle, veuillez passer au didacticiel .NET Batch.
Apprenez à utiliser la plateforme Azure Batch pour écrire une application console .NET Core qui effectue un transcodage vidéo parallèle, à grande échelle et à hautes performances.
Générez des solutions de bout en bout dans Microsoft Azure pour créer des fonctions Azure Functions, implémenter et gérer des applications web, développer des solutions qui utilisent le Stockage Azure, et bien plus encore.