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 (virtuális gépből) 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.
  2. A Batch-fiók lapján válassza a bal oldali navigációs sáv Kulcsok elemét.
  3. Másolja a következő értékeket a Kulcsok lapra:
  • Batch-fiók
  • Fiókvégpont
  • Elsődleges hozzáférési kulcs
  • Tárfiók neve
  • 1. kulcs

Lépjen a letöltött batch-dotnet-quickstart mappába, és szerkessze a program.cs hitelesítőadat-sztringeket a másolt értékek megadásához:

// Batch account credentials
private const string BatchAccountName = "<batch account>";
private const string BatchAccountKey  = "<primary access key>";
private const string BatchAccountUrl  = "<account endpoint>";

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

Fontos

Az alkalmazás forrásában lévő fiókkulcsok közzététele éles használat esetén nem ajánlott. Korlátoznia kell a hitelesítő adatokhoz való hozzáférést, és változók vagy konfigurációs fájlok használatával hivatkoznia kell rájuk a kódban. A Legjobb, ha Batch- és Storage-fiókkulcsokat tárol az Azure Key Vaultban.

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 parancssort dotnet build és dotnet run a 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ő, és válassza a Build lehetőséget. Ha a rendszer kéri, a NuGet-Csomagkezelő használatával 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 kezdeti készletcsomópont beállítása a legtöbb időt igénybe veszi. A feladat újrafuttatásához törölje a feladatot az előző futtatásból, de ne törölje a készletet. Egy előre konfigurált készleten 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...

Monitoring all tasks for 'Completed' state, timeout in 00:30:00... A készlet számítási csomópontjai elindulnak. A tevékenységek létrehozásakor a Batch várólistára állítja őket a készleten való futtatáshoz. 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.

    var sharedKeyCredential = new StorageSharedKeyCredential(storageAccountName, storageAccountKey);
    string blobUri = "https://" + storageAccountName + ".blob.core.windows.net";
    
    var blobServiceClient = new BlobServiceClient(new Uri(blobUri), sharedKeyCredential);
    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 a Batch-készletek, feladatok és feladatok létrehozásához és kezeléséhez. A Batch-ügyfél megosztott kulcsos hitelesítést használ. A Batch a Microsoft Entra-hitelesítést is támogatja.

    var cred = new BatchSharedKeyCredentials(BatchAccountUrl, BatchAccountName, BatchAccountKey);
    
     using BatchClient batchClient = BatchClient.Open(cred);
    ...
    

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

Batch-készlet létrehozásához az alkalmazás a BatchClient.PoolOperations.CreatePool 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ő VirtualMachineConfiguration objektum egy ImageReference paramétert ad meg egy Windows Server Marketplace-lemezképhez. 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 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 rövid útmutatóhoz.

A Commit metódus elküldi a készletet a Batch szolgáltatásnak.


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();
    }
...

Batch-feladat létrehozása

A Batch-feladat egy vagy több tevékenység logikai csoportosítása. A feladat tartalmazza a tevékenységekhez gyakran használt beállításokat, például a prioritást és a készletet a tevékenységek futtatásához.

Az alkalmazás a BatchClient.JobOperations.CreateJob metódussal létrehoz egy feladatot a készleten. A Commit metódus elküldi a feladatot a Batch szolgáltatásnak. A feladat kezdetben nem tartalmaz tevékenységeket.

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

    job.Commit();
}
...

Tevékenységek 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 CloudTask bemeneti ResourceFile objektumainak 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 hozzáadja az egyes feladatokat a feladathoz az AddTask metódussal, amely várólistára állítja a feladatot a számítási csomópontokon való futtatáshoz.

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

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

Az alkalmazás létrehoz egy TaskStateMonitort a tevékenységek monitorozásához és annak befejezéséhez. Ha minden feladat sikeresen lefut, a kimenete az stdout.txt fájlba íródik. Az alkalmazás ezután a CloudTask.ComputeNodeInformation tulajdonsággal jeleníti meg az stdout.txt fájlt az egyes befejezett tevékenységekhez.

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

Clean up resources

Az alkalmazás automatikusan törli a létrehozott Storage-tárolót, és felkínálja a Batch-készlet és -feladat törlésének lehetőségé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 futtatnak feladatokat. Ha már nincs szüksége a készletre, 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 rövid útmutatóban futtatott egy alkalmazást, amely a Batch .NET API használatával hoz létre Batch-készletet, csomópontokat, feladatokat é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.