Feladat- és tevékenységadatok megőrzése az Azure Storage-ban a Batch File Conventions .NET-hez készült kódtárával

A Azure Batch futó tevékenységek kimeneti adatokat hozhatnak létre a futtatáskor. A feladat kimeneti adatait gyakran tárolni kell a feladat más tevékenységei, a feladatot végrehajtó ügyfélalkalmazás vagy mindkettő lekéréséhez. A feladatok kimeneti adatokat írnak egy Batch számítási csomópont fájlrendszerére, de a csomóponton lévő összes adat elveszik, amikor az újra fel van állítva, vagy amikor a csomópont elhagyja a készletet. A tevékenységek fájlmegőrzési időszaka is lehet, amely után a feladat által létrehozott fájlok törlődnek. Emiatt fontos, hogy a feladat kimenete megmaradjon, amelyet később egy adattárban, például az Azure Storage-ban kell tárolnia.

A Batch tárfiók-beállításaiért lásd: Batch-fiókok és Azure Storage-fiókok.

A feladatadatokat Azure Batch a .NET Fájlkonvenciók tárával őrizheti meg. A Fájlkonvenciók kódtár leegyszerűsíti a feladatkimeneti adatok Azure Storage-ban való tárolásának és lekérésének folyamatát. A Fájlkonvenciók kódtárat feladat- és ügyfélkódban is használhatja. Feladat módban a tár használatával őrizheti meg a fájlokat. Ügyfél módban a kódtár használatával listázhatja és lekérheti a fájlokat. A feladatkód a felsőbb rétegbeli tevékenységek kimenetét is lekérheti a kódtár használatával, például egy tevékenységfüggőség-forgatókönyvben .

Ha kimeneti fájlokat szeretne lekérni a Fájlkonvenciók tárból, keresse meg egy feladat vagy feladat fájljait. Nem kell tudnia a fájlok nevét vagy helyét. Ehelyett a fájlokat azonosító és cél szerint listázhatja. Listázz például egy adott tevékenységhez tartozó összes köztes fájlt. Vagy szerezzen be egy előnézeti fájlt egy adott feladathoz.

A 2017-05-01-es verziótól kezdődően a Batch szolgáltatás API támogatja a kimeneti adatok Azure Storage-ba való megőrzését a virtuális gép (VM) konfigurációjával létrehozott készleteken futó feladatokhoz és feladatkezelő feladatokhoz. A kimenetet a feladatot létrehozó kódból is megőrizheti. Ez a módszer a Fájlkonvenciók kódtár alternatíva. A Batch-ügyfélalkalmazásokat úgy módosíthatja, hogy megőrizze a kimenetet anélkül, hogy frissítenie kellene a feladatot futtató alkalmazást. További információ: Feladatadatok megőrzése az Azure Storage-ban a Batch szolgáltatás API-jával.

Tárhasználati esetek

Azure Batch többféle módot kínál a tevékenység kimenetének megőrzésére. A Fájlkonvenciók tárat a következő esetekben használhatja:

  • Módosítsa annak az alkalmazásnak a kódját, amelyet a feladat futtat a fájlok megőrzéséhez.
  • Streamelje az adatokat az Azure Storage-ba, amíg a feladat még fut.
  • Adatok megőrzése a készletekből.
  • Keresse meg és töltse le a feladat kimeneti fájljait azonosító vagy cél alapján az ügyfélalkalmazásban vagy más feladatokban.
  • A tevékenység kimenetének megtekintése a Azure Portal.

Más forgatókönyvek esetén érdemes megfontolni egy másik megközelítést. További információ az egyéb lehetőségekről: Feladat- és tevékenységkimenet megőrzése az Azure Storage-ban.

Mi a Batch-fájlkonvenciók szabványa?

A Batch-fájlkonvenciók szabványa elnevezési sémát biztosít azon céltárolókhoz és blobelérési útvonalakhoz, amelyekbe a kimeneti fájlokat írják. A szabványnak megfelelő Azure Storage-ban tárolt fájlok automatikusan megtekinthetők a Azure Portal.

A .NET Fájlkonvenciók könyvtára a szabványnak megfelelően automatikusan elnevezi a tárolókat és a feladatkimeneti fájlokat. A kódtár metódusokat is biztosít a kimeneti fájlok Azure Storage-ban való lekérdezéséhez. Lekérdezhet feladatazonosító, tevékenységazonosító vagy cél alapján.

Ha a .NET-en kívül más nyelvvel fejleszt, saját maga is megvalósíthatja a Fájlkonvenciók szabványt az alkalmazásban. További információ: A Batch-fájlkonvenciók szabványának implementálása.

Ahhoz, hogy a kimeneti adatok megmaradjanak az Azure Storage-ban a Fájlkonvenciók kódtár használatával, először csatoljon egy Azure Storage-fiókot a Batch-fiókhoz.

  1. Jelentkezzen be az Azure Portal.
  2. Keresse meg és válassza a Batch elemet a keresősávban.
  3. Válassza ki az Azure Storage-hoz csatolandó Batch-fiókot.
  4. A Batch-fiók lap Beállítások területén válassza a Tárfiók lehetőséget.
  5. Ha még nem társított Azure Storage-fiókot a Batch-fiókjához, válassza a Tárfiók (Nincs) lehetőséget.
  6. Válassza ki a használni kívánt Azure Storage-fiókot. A legjobb teljesítmény érdekében használjon egy fiókot ugyanabban a régióban, mint a Batch-fiók.

Kimeneti adatok megőrzése

A feladat- és tevékenységkimeneti adatokat a Fájlkonvenciók tárban őrizheti meg. Először hozzon létre egy tárolót az Azure Storage-ban. Ezután mentse a kimenetet a tárolóba. A feladatkódban használja a .NET-hez készült Azure Storage ügyfélkódtárat a feladat kimenetének a tárolóba való feltöltéséhez.

További információ a tárolók és blobok Azure Storage-ban való használatáról: Az Azure Blob Storage használatának első lépései a .NET használatával.

A Fájlkonvenciók tárban tárolt összes feladat- és feladatkimenet ugyanabban a tárolóban van tárolva. Ha sok feladat próbálja egyszerre megőrzeni a fájlokat, előfordulhat, hogy az Azure Storage szabályozási korlátai kényszerítve vannak. További információ: A Blob Storage teljesítmény- és méretezhetőségi ellenőrzőlistája.

Storage-tároló létrehozása

Ha meg szeretné őrizni a feladat kimenetét az Azure Storage-ban, először hozzon létre egy tárolót a CloudJob meghívásával. PrepareOutputStorageAsync. Ez a bővítménymetódus egy CloudStorageAccount objektumot vesz fel paraméterként. A metódus létrehoz egy nevű tárolót a File Conventions szabványnak megfelelően. A tároló tartalmát a cikkben ismertetett Azure Portal és lekérési módszerekkel lehet felderíteni.

Általában hozzon létre egy tárolót az ügyfélalkalmazásban, amely létrehozza a készleteket, feladatokat és feladatokat. Például:

CloudJob job = batchClient.JobOperations.CreateJob(
    "myJob",
    new PoolInformation { PoolId = "myPool" });

// Create reference to the linked Azure Storage account
CloudStorageAccount linkedStorageAccount =
    new CloudStorageAccount(myCredentials, true);

// Create the blob storage container for the outputs
await job.PrepareOutputStorageAsync(linkedStorageAccount);

Tevékenységkimenetek tárolása

A tároló létrehozása után a feladatok menthetik a kimenetet a tárolóba a TaskOutputStorage használatával. Ez az osztály a Fájlkonvenciók tárban érhető el.

A feladatkódban hozzon létre egy TaskOutputStorage objektumot. Amikor a tevékenység befejezi a munkáját, hívja meg a TaskOutputStorage nevet. SaveAsync metódus. Ez a lépés az Azure Storage-ba menti a kimenetet.

CloudStorageAccount linkedStorageAccount = new CloudStorageAccount(myCredentials);
string jobId = Environment.GetEnvironmentVariable("AZ_BATCH_JOB_ID");
string taskId = Environment.GetEnvironmentVariable("AZ_BATCH_TASK_ID");

TaskOutputStorage taskOutputStorage = new TaskOutputStorage(
    linkedStorageAccount, jobId, taskId);

/* Code to process data and produce output file(s) */

await taskOutputStorage.SaveAsync(TaskOutputKind.TaskOutput, "frame_full_res.jpg");
await taskOutputStorage.SaveAsync(TaskOutputKind.TaskPreview, "frame_low_res.jpg");

A kindTaskOutputStorage paramétere. A SaveAsync metódus kategorizálja a megőrzött fájlokat. Négy előre definiált TaskOutputKind típus létezik: TaskOutput, TaskPreview, TaskLogés TaskIntermediate. A kimenet egyéni kategóriáit is definiálhatja.

Adja meg, hogy milyen típusú kimeneteket szeretne listázni a Batch későbbi lekérdezésekor. Ezután a tevékenységek kimeneteinek listázásakor szűrhet az egyik kimeneti típusra. Szűrjön például a következőre: "Adja meg a 109.feladatelőnézeti kimenetét". További információ: Kimeneti adatok lekérése.

A kimeneti típus azt is meghatározza, hogy a kimeneti fájl hol jelenik meg a Azure Portal. A TaskOutput (Feladatkimenet ) kategóriába tartozó fájlok a Tevékenység kimeneti fájljai alatt találhatók. A Feladatnapló kategóriában található fájlok a Tevékenységnaplók területen találhatók.

Feladatkimenetek tárolása

A teljes feladathoz társított kimeneteket is tárolhatja. Egy mozgókép-renderelési feladat egyesítési feladatában például megőrizheti a teljes renderelt mozgóképet feladatkimenetként. Amikor a feladat befejeződött, az ügyfélalkalmazás listázhatja és lekérheti a feladat kimeneteit. Az ügyfélalkalmazásnak nem kell lekérdeznie az egyes feladatokat.

Tárolja a feladat kimenetét a JobOutputStorage meghívásával. SaveAsync metódus. Adja meg a JobOutputKind és a fájlnevet. Például:

CloudJob job = new JobOutputStorage(acct, jobId);
JobOutputStorage jobOutputStorage = job.OutputStorage(linkedStorageAccount);

await jobOutputStorage.SaveAsync(JobOutputKind.JobOutput, "mymovie.mp4");
await jobOutputStorage.SaveAsync(JobOutputKind.JobPreview, "mymovie_preview.mp4");

A feladat kimeneteinek TaskOutputKind típusához hasonlóan a JobOutputKind típussal is kategorizálhatja a feladat megőrzött fájljait. Később listázhat egy adott típusú kimenetet. A JobOutputKind típus a kimeneti és az előnézeti kategóriákat is tartalmazza. A típus támogatja az egyéni kategóriák létrehozását is.

Feladatnaplók tárolása

Előfordulhat, hogy a feladat végrehajtása során frissített fájlokat is meg kell őriznie. Előfordulhat például, hogy meg kell őriznie a naplófájlokat, vagy stdout.txt a fájlt stderr.txt. A Fájlkonvenciók tár biztosítja a TaskOutputStorage elemet. SaveTrackedAsync metódus az ilyen típusú fájlok megőrzéséhez. A SaveTrackedAsync használatával nyomon követheti a csomóponton lévő fájl frissítéseit egy megadott időközönként. Ezután őrizze meg ezeket a frissítéseket az Azure Storage-ban.

Az alábbi példa a SaveTrackedAsync használatával 15 másodpercenként frissül stdout.txt az Azure Storage-ban a feladat végrehajtása során:

TimeSpan stdoutFlushDelay = TimeSpan.FromSeconds(3);
string logFilePath = Path.Combine(
    Environment.GetEnvironmentVariable("AZ_BATCH_TASK_DIR"), "stdout.txt");

// The primary task logic is wrapped in a using statement that sends updates to
// the stdout.txt blob in Storage every 15 seconds while the task code runs.
using (ITrackedSaveOperation stdout =
        await taskStorage.SaveTrackedAsync(
        TaskOutputKind.TaskLog,
        logFilePath,
        "stdout.txt",
        TimeSpan.FromSeconds(15)))
{
    /* Code to process data and produce output file(s) */

    // We are tracking the disk file to save our standard output, but the
    // node agent may take up to 3 seconds to flush the stdout stream to
    // disk. So give the file a moment to catch up.
     await Task.Delay(stdoutFlushDelay);
}

Cserélje le a megjegyzést tartalmazó szakaszt Code to process data and produce output file(s) a tevékenység szokásos kódjára. Előfordulhat például, hogy olyan kóddal rendelkezik, amely adatokat tölt le az Azure Storage-ból, majd átalakításokat vagy számításokat végez. Ezt a kódot egy blokkba using tördelve rendszeres időközönként frissítheti a fájlokat a SaveTrackedAsync használatával.

A csomópontügynök egy olyan program, amely a készlet minden csomópontján fut. Ez a program biztosítja a parancs- és vezérlőfelületet a csomópont és a Batch szolgáltatás között. A Task.Delay hívásra a blokk végén using van szükség. A hívás gondoskodik arról, hogy a csomópontügynöknek legyen ideje kiüríteni a standard tartalmát a stdout.txt csomóponton lévő fájlba. E késleltetés nélkül kihagyhatja a kimenet utolsó néhány másodpercét. Előfordulhat, hogy nincs szükség erre a késleltetésre az összes fájl esetében.

Ha engedélyezi a fájlkövetést a SaveTrackedAsync használatával, csak a követett fájlhoz fűzött hozzáfűzések maradnak meg az Azure Storage-ban. Ezt a módszert csak a nem forgó naplófájlok, illetve a fájl végéhez hozzáfűző műveletekkel írt egyéb fájlok nyomon követésére használja.

Kimeneti adatok lekérése

Egy adott feladat vagy feladat kimeneti fájljainak lekéréséhez nem kell ismernie az Azure Storage elérési útját vagy a fájlneveket. Ehelyett feladat- vagy feladatazonosító alapján kérheti le a kimeneti fájlokat.

Az alábbi példakód végigvezeti egy feladat tevékenységein. Ezután a kód kinyomtat néhány információt a feladat kimeneti fájljairól. Ezután a kód letölti a fájlokat az AzureStorage-ból.

foreach (CloudTask task in myJob.ListTasks())
{
    foreach (OutputFileReference output in
        task.OutputStorage(storageAccount).ListOutputs(
            TaskOutputKind.TaskOutput))
    {
        Console.WriteLine($"output file: {output.FilePath}");

        output.DownloadToFileAsync(
            $"{jobId}-{output.FilePath}",
            System.IO.FileMode.Create).Wait();
    }
}

Kimeneti fájlok megtekintése a Azure Portal

Ha a feladat kimeneti fájljai a Batch File Conventions szabványt használják, megtekintheti a fájlokat a Azure Portal.

A kimeneti fájlok portálon való megjelenítésének engedélyezéséhez meg kell felelnie a következő követelményeknek:

Ahhoz, hogy a kimeneti fájlok automatikusan megjelenjenek a Azure Portal, a következőket kell tennie:

  1. Azure Storage-fiók csatolása a Batch-fiókhoz.
  2. Kövesse az Azure Storage-tárolók és -fájlok előre definiált elnevezési konvencióit. Tekintse át a README elemet az összes definícióhoz. Ha a Fájlkonvenciók tárat használja a kimenet megőrzéséhez, a fájlok a Fájlkonvenciók szabványnak megfelelően maradnak meg.

A feladat kimeneti fájljainak és naplóinak megtekintése a Azure Portal:

  1. Jelentkezzen be az Azure Portal.
  2. Nyissa meg azt a feladatot, amelynek a kimenetét meg szeretné tekinteni.
  3. Válassza a Mentett kimeneti fájlok vagy a Mentett naplók lehetőséget.

Kódminta

A PersistOutputs mintaprojekt a GitHub egyik Azure Batch kódmintája. Ez a Visual Studio-megoldás bemutatja, hogyan használhatja a Azure Batch Fájlkonvenciók kódtárat a feladat kimenetének tartós tárban való megőrzéséhez. A minta futtatásához kövesse az alábbi lépéseket:

  1. Nyissa meg a projektet a Visual Studio 2019-ben.
  2. Adja hozzá a Batch- és Azure Storage-fiók hitelesítő adatait az AccountSettings.settings fájlhoz a Microsoft.Azure.Batch.Samples.Common projektben.
  3. Hozza létre a megoldást. Még ne futtassa a megoldást.
  4. Ha a rendszer kéri, állítsa vissza a NuGet-csomagokat.
  5. Töltse fel a PersistOutputsTaskalkalmazáscsomagját a Azure Portal keresztül.
    1. Adja hozzá a PersistOutputsTask.exe végrehajtható fájlt és annak függő szerelvényeit a .zip csomaghoz.
    2. Állítsa az alkalmazásazonosítót értékre PersistOutputsTask.
    3. Állítsa az alkalmazáscsomag verzióját értékre 1.0.
  6. A projekt futtatásához válassza a Start gombot.
  7. Amikor a rendszer kéri a használni kívánt adatmegőrzési technológia kiválasztását, adja meg az 1 értéket. Ez a beállítás futtatja a mintát a Fájlkonvenciók tár használatával a feladat kimenetének megőrzéséhez.

A Batch File Conventions .NET-hez készült kódtárának lekérése

A .NET-hez készült Batch File Conventions kódtár elérhető a NuGeten. A kódtár új metódusokkal bővíti a CloudJob - és CloudTask-osztályokat . További információkért tekintse meg a Fájlkonvenciók tárának referenciadokumentációját.

A Fájlkonvenciók kódtár forráskódja elérhető a GitHubon.

Következő lépések