Rövid útmutató: Batch-készlet létrehozása és feladat futtatása a .NET használatával

Ez a rövid útmutató bemutatja, hogyan kezdheti el az Azure Batch használatát az Azure Batch .NET API-t használó C# alkalmazás futtatásával. A .NET-alkalmazás:

  • Több bemeneti adatfájlt tölt fel egy Azure Storage-blobtárolóba a Batch-feladatfeldolgozáshoz való használatra.
  • Létrehoz egy készletet két, Windows Servert futtató virtuális gépből (VM) vagy számítási csomópontból.
  • Létrehoz egy feladatot, amely feladatokat futtat a csomópontokon az egyes bemeneti fájlok Windows-parancssor használatával történő feldolgozásához.
  • Megjeleníti a tevékenységek által visszaadott kimeneti fájlokat.

A rövid útmutató elvégzése után megismerheti a Batch szolgáltatás alapvető fogalmait, és készen áll a Batch reálisabb, nagyobb méretű számítási feladatok használatára.

Előfeltételek

Az alkalmazás futtatása

A rövid útmutató végrehajtásához töltse le vagy klónozza az alkalmazást, adja meg a fiók értékeit, hozza létre és futtassa az alkalmazást, és ellenőrizze a kimenetet.

Az alkalmazás letöltése vagy klónozása

Töltse le vagy klónozza az Azure Batch .NET gyorsindítási alkalmazást a GitHubról. Az alábbi paranccsal klónozza az alkalmazás-adattárat egy Git-ügyféllel:

git clone https://github.com/Azure-Samples/batch-dotnet-quickstart.git

Adja meg a fiók adatait

Az alkalmazásnak a Batch- és Storage-fiókneveket, a fiókkulcsértékeket és a Batch-fiókvégpontot kell használnia. Ezeket az információkat az Azure Portalról, az Azure API-kból vagy a parancssori eszközökből szerezheti be.

Fiókadatok lekérése az Azure Portalról:

  1. Az Azure Search sávon keresse meg és válassza ki a Batch-fiók nevét.
  • Batch-fiók
  • Felhasználói fiók végpont
  • Tárhelyfiók neve
  • Előfizetés azonosítója
  • Erőforráscsoport neve

Keresse meg a letöltött batch-dotnet-quickstart mappát, és szerkessze a hitelesítőadat-sztringeket a Program.cs-ben a másolt értékek megadásához.

// Batch account credentials
const string BatchAccountName = "<batch account>";
const string BatchAccountUrl  = "<account endpoint>";

// Azure Resource Manager credentials for the Batch account
const string SubscriptionId    = "<subscription ID>";
const string ResourceGroupName = "<resource group name>";

// Storage account credentials
const string StorageAccountName = "<storage account name>";

Az alkalmazás létrehozása és futtatása és a kimenet megtekintése

A Batch-munkafolyamat működés közbeni megtekintéséhez hozza létre és futtassa az alkalmazást a Visual Studióban. A parancssori dotnet build és dotnet run parancsokat is használhatja.

A Visual Studióban:

  1. Nyissa meg a BatchDotNetQuickstart.sln fájlt, kattintson a jobb gombbal a megoldásra a Megoldáskezelőben, és válassza a Build lehetőséget. Ha a rendszer kéri, a NuGet Csomagkezelőrel frissítse vagy állítsa vissza a NuGet-csomagokat.

  2. A build befejezése után válassza a BatchDotNetQuickstart lehetőséget a felső menüsávon az alkalmazás futtatásához.

Az alapértelmezett konfigurációval rendelkező tipikus futási idő körülbelül öt perc. A legtöbb időt a kezdeti csomópont beállítása veszi igénybe. A feladat újrafuttatásához törölje a feladatot az előző futtatásból, de ne törölje az erőforráskészletet. Egy előre konfigurált készletben a feladat néhány másodperc alatt befejeződik.

Az alkalmazás a következő példához hasonló kimenetet ad vissza:

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

Az Monitoring all tasks for 'Completed' state, timeout in 00:30:00... alatt szünetelés van, amíg a készlet számítási csomópontjai elindulnak. Feladatok létrehozásakor a Batch sorba állítja őket a csomóponton való futtatásra. Amint az első számítási csomópont elérhetővé válik, az első feladat a csomóponton fut. A csomópontok, a tevékenységek és a feladatok állapotát az Azure Portal Batch-fiókjának oldaláról figyelheti.

Az egyes tevékenységek befejezése után a következő példához hasonló kimenet jelenik meg:

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:
...

A kód áttekintése

Tekintse át a kódot az Azure Batch .NET gyorsútmutató lépéseinek megismeréséhez.

Szolgáltatás-ügyfelek létrehozása és erőforrásfájlok feltöltése

  1. A tárfiókkal való interakcióhoz az alkalmazás az Azure Storage Blobs ügyfélkódtárat használja a .NET-hez egy BlobServiceClient létrehozásához.

    string blobUri = "https://" + storageAccountName + ".blob.core.windows.net";
    
    var blobServiceClient = new BlobServiceClient(new Uri(blobUri), new DefaultAzureCredential());
    return blobServiceClient;
    
  2. Az alkalmazás a blobServiceClient hivatkozással létrehoz egy tárolót a tárfiókban, és adatfájlokat tölt fel a tárolóba. A tárolóban lévő fájlok Batch ResourceFile-objektumokként vannak definiálva, amelyeket a Batch később letölthet a számítási csomópontokra.

    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));
    }
    
  3. Az alkalmazás létrehoz egy BatchClient objektumot az Azure.Compute.Batch kódtárból Batch-feladatok és -tevékenységek létrehozásához és kezeléséhez. A Batch-ügyfél Microsoft Entra hitelesítést használ.

    BatchClient batchClient = new BatchClient(new Uri(BatchAccountUrl), new DefaultAzureCredential());
    ...
    
  4. Az alkalmazás a Azure.ResourceManager.Batch könyvtárat is használja a Batch-fiók és készleteinek kezelésére. Létrehoz egy ArmClient ügyfelet, és az előfizetés azonosítója, az erőforráscsoport neve és a Batch-fiók neve használatával lekéri a Batch-fiókhoz tartozó BatchAccountResource referenciáját.

    ArmClient armClient = new ArmClient(new DefaultAzureCredential());
    
    ResourceIdentifier batchAccountIdentifier = BatchAccountResource.CreateResourceIdentifier(
        SubscriptionId,
        ResourceGroupName,
        BatchAccountName);
    
    BatchAccountResource batchAccount = armClient.GetBatchAccountResource(batchAccountIdentifier);
    

Számításicsomópont-készlet létrehozása

Batch-készlet létrehozásához az alkalmazás a BatchAccountPoolCollection.CreateOrUpdateAsync metódussal állítja be a csomópontok számát, a virtuális gép méretét és a készletkonfigurációt. A következő BatchVmConfiguration objektum egy Windows Server Marketplace-lemezképre mutató BatchImageReference hivatkozást ad meg. A Batch számos Windows Server- és Linux Marketplace-rendszerképet támogat, és támogatja az egyéni virtuálisgép-rendszerképeket is.

A PoolNodeCount és a virtuális gép mérete PoolVMSize definiált állandók. Az alkalmazás két Standard_A1_v2 csomópontból álló készletet hoz létre. Ez a méret a teljesítmény és a költségek jó egyensúlyát kínálja ehhez a gyorsindításhoz.

BatchImageReference imageReference = new BatchImageReference()
{
    Publisher = "MicrosoftWindowsServer",
    Offer = "WindowsServer",
    Sku = "2016-datacenter-smalldisk",
    Version = "latest"
};

BatchVmConfiguration vmConfiguration = new BatchVmConfiguration(
    imageReference: imageReference,
    nodeAgentSkuId: "batch.node.windows amd64");

BatchAccountPoolData poolData = new BatchAccountPoolData()
{
    VmSize = PoolVMSize,
    DeploymentConfiguration = new BatchDeploymentConfiguration() { VmConfiguration = vmConfiguration },
    ScaleSettings = new BatchAccountPoolScaleSettings()
    {
        FixedScale = new BatchAccountFixedScaleSettings() { TargetDedicatedNodes = PoolNodeCount }
    }
};

await batchAccount.GetBatchAccountPools().CreateOrUpdateAsync(WaitUntil.Completed, PoolId, poolData);

Batch-feladat létrehozása

A Batch-feladat egy vagy több tevékenység logikai csoportosítása. A munkakör magában foglalja a feladatokhoz gyakran használt beállításokat, mint például a prioritást és az erőforráshalmazt a feladatok futtatásához.

Az alkalmazás a BatchClient.CreateJobAsync használja arra, hogy létrehozzon egy feladatot a készletében. A feladat kezdetben nem rendelkezik feladatokkal.

BatchJobCreateOptions job = new BatchJobCreateOptions(JobId, new BatchPoolInfo() { PoolId = PoolId });
await batchClient.CreateJobAsync(job);

Feladatok létrehozása

A Batch többféleképpen is üzembe helyezhet alkalmazásokat és szkripteket a számítási csomópontokon. Ez az alkalmazás létrehozza a BatchTaskCreateOptions bemeneti ResourceFile objektumok listáját. Mindegyik feladat egy CommandLine-tulajdonság használatával dolgozza fel a bemeneti fájlokat. A Batch parancssorban adhatja meg az alkalmazást vagy a szkriptet.

A következő kód parancssora futtatja a Windows type parancsot a bemeneti fájlok megjelenítéséhez. Ezután az alkalmazás a BatchClient.CreateTasksAsync használatával adja hozzá a feladathoz a feladatokat, amely várólistára állítja a számítási csomópontokon futtatandó feladatokat.

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

    BatchTaskCreateOptions task = new BatchTaskCreateOptions(taskId, taskCommandLine)
    {
        ResourceFiles = { inputFiles[i] }
    };
    tasks.Add(task);
}

await batchClient.CreateTasksAsync(JobId, tasks);

A tevékenység kimenetének megtekintése

Az alkalmazás megvárja a feladatok befejezését. Ha minden feladat sikeresen lefut, a kimenete stdout.txt. Az alkalmazás ezután a BatchTask.NodeInfo tulajdonsággal jeleníti meg az egyes befejezett tevékenységekhez tartozóstdout.txt fájlt.

await foreach (BatchTask task in batchClient.GetTasksAsync(JobId))
{
    string nodeId = task.NodeInfo?.NodeId ?? "<unknown>";
    Console.WriteLine("Task: {0}", task.Id);
    Console.WriteLine("Node: {0}", nodeId);
    Console.WriteLine("Standard out:");
    BinaryData stdout = await batchClient.GetTaskFileAsync(JobId, task.Id, "stdout.txt");
    Console.WriteLine(stdout.ToString());
}

Erőforrások tisztítása

Az alkalmazás automatikusan törli a létrehozott tárolót, és lehetővé teszi a Batch-készlet és -feladat törlését. A készletek és csomópontok díjakat vonnak maguk után, amíg a csomópontok futnak, még akkor is, ha nem hajtanak végre feladatokat. Ha már nincs szüksége a medencére, törölje.

Ha már nincs szüksége a Batch-fiókra és a tárfiókra, törölheti az őket tartalmazó erőforráscsoportot. Az Azure Portalon válassza az Erőforráscsoport törlése lehetőséget az erőforráscsoport lap tetején. Az erőforráscsoport törlése képernyőn adja meg az erőforráscsoport nevét, majd válassza a Törlés lehetőséget.

Következő lépések

Ebben a gyorsútmutatóban futtatott egy alkalmazást, amely a Batch .NET API használatával hoz létre egy Batch-készletet, csomópontokat, egy munkát és feladatokat. A feladat erőforrásfájlokat töltött fel egy tárolóba, feladatokat futtatott a csomópontokon, és megjeleníti a csomópontok kimenetét.

Most, hogy megismerte a Batch szolgáltatás főbb fogalmait, készen áll a Batch reálisabb, nagyobb méretű számítási feladatok használatára. Ha többet szeretne megtudni az Azure Batchről, és egy valós alkalmazással párhuzamos számítási feladaton szeretne végighaladni, folytassa a Batch .NET oktatóanyagával.