Sdílet prostřednictvím


Uchování dat úloh a úkolů do služby Azure Storage pomocí knihovny Batch File Conventions pro .NET

Úloha spuštěná v Azure Batch může při spuštění vytvářet výstupní data. Výstupní data úlohy často musí být uložena pro načtení jinými úkoly v úloze, klientskou aplikací, která úlohu spustila, nebo obojím. Úkoly zapisují výstupní data do systému souborů výpočetního uzlu Batch, ale všechna data na uzlu se ztratí, když se znovu z image uzlu nebo když uzel opustí fond. Úkoly mohou mít také dobu uchovávání souborů, po jejímž uplynutí se soubory vytvořené úlohou odstraní. Z těchto důvodů je důležité zachovat výstup úlohy, který budete později potřebovat, do úložiště dat, jako je Azure Storage.

Možnosti účtu úložiště ve službě Batch najdete v tématu Účty Batch a Účty azure Storage.

Data úkolů z Azure Batch můžete zachovat pomocí knihovny File Conventions pro .NET. Knihovna File Conventions zjednodušuje proces ukládání a načítání výstupních dat úloh ve službě Azure Storage. Knihovnu File Conventions můžete použít v kódu úlohy i v klientském kódu. V režimu úloh použijte knihovnu k uložení souborů. V režimu klienta použijte knihovnu k výpisu a načtení souborů. Kód úkolu může také načíst výstup nadřazených úkolů pomocí knihovny, například ve scénáři závislostí úkolů .

Pokud chcete načíst výstupní soubory pomocí knihovny File Conventions, vyhledejte soubory pro úlohu nebo úkol. Nemusíte znát názvy ani umístění souborů. Místo toho můžete soubory vypsat podle ID a účelu. Můžete například zobrazit seznam všech zprostředkujících souborů pro daný úkol. Nebo získejte soubor náhledu pro danou úlohu.

Od verze 2017-05-01 podporuje rozhraní API služby Batch uchovávání výstupních dat do služby Azure Storage pro úlohy a úlohy správce úloh, které běží ve fondech vytvořených s konfigurací virtuálního počítače. Výstup můžete zachovat v kódu, který vytváří úlohu. Tato metoda je alternativou ke knihovně File Conventions. Klientské aplikace Batch můžete upravit tak, aby se zachoval výstup, aniž byste museli aktualizovat aplikaci, na které běží váš úkol. Další informace najdete v tématu Zachování dat úloh do služby Azure Storage pomocí rozhraní API služby Batch.

Případy použití knihovny

Azure Batch nabízí několik způsobů, jak zachovat výstup úlohy. Knihovnu File Conventions použijte v následujících případech:

  • Upravte kód aplikace, kterou úloha spouští, aby se zachovaly soubory.
  • Streamujte data do Azure Storage, i když je úloha stále spuštěná.
  • Zachování dat z fondů
  • Vyhledejte a stáhněte výstupní soubory úkolů podle ID nebo účelu v klientské aplikaci nebo jiných úlohách.
  • Zobrazte výstup úkolu v Azure Portal.

V jiných scénářích můžete zvážit jiný přístup. Další informace o dalších možnostech najdete v tématu Zachování výstupu úloh a úloh ve službě Azure Storage.

Co je standard konvencí pro dávkové soubory?

Standard Batch File Conventions poskytuje schéma pojmenování pro cílové kontejnery a cesty objektů blob, do kterých se zapisují výstupní soubory. Soubory uložené ve službě Azure Storage, které dodržují standard, se automaticky zobrazí v Azure Portal.

Knihovna File Conventions pro .NET automaticky pojmenuje kontejnery úložiště a výstupní soubory úkolů podle standardu. Knihovna také poskytuje metody pro dotazování výstupních souborů ve službě Azure Storage. Dotazovat se můžete podle ID úlohy, ID úkolu nebo účelu.

Pokud vyvíjíte v jiném jazyce než .NET, můžete standard File Conventions implementovat sami ve své aplikaci. Další informace najdete v tématu Implementace standardu Konvence pro dávkové soubory.

Pokud chcete zachovat výstupní data do služby Azure Storage pomocí knihovny File Conventions, nejprve propojte účet Azure Storage s účtem Batch.

  1. Přihlaste se k webu Azure Portal.
  2. Na panelu hledání vyhledejte a vyberte Batch .
  3. Vyberte účet Batch, který chcete propojit se službou Azure Storage.
  4. Na stránce účet Batch v části Nastavení vyberte Účet úložiště.
  5. Pokud ještě nemáte účet Služby Azure Storage přidružený k účtu Batch, vyberte Účet úložiště (Žádný).
  6. Vyberte účet Azure Storage, který chcete použít. Pro zajištění nejlepšího výkonu použijte účet ve stejné oblasti jako účet Batch.

Zachování výstupních dat

Výstupní data úloh a úkolů můžete zachovat pomocí knihovny File Conventions. Nejprve vytvořte kontejner ve službě Azure Storage. Pak výstup uložte do kontejneru. Pomocí klientské knihovny Azure Storage pro .NET v kódu úlohy nahrajte výstup úlohy do kontejneru.

Další informace o práci s kontejnery a objekty blob ve službě Azure Storage najdete v tématu Začínáme se službou Azure Blob Storage pomocí .NET.

Všechny výstupy úloh a úkolů uložené v knihovně File Conventions jsou uložené ve stejném kontejneru. Pokud se velký počet úloh pokusí zachovat soubory najednou, můžou se vynucovat limity omezování služby Azure Storage. Další informace najdete v tématu Kontrolní seznam výkonu a škálovatelnosti pro úložiště objektů blob.

Vytvoření kontejneru úložiště

Pokud chcete zachovat výstup úlohy do služby Azure Storage, nejprve vytvořte kontejner voláním cloudové úlohy. PrepareOutputStorageAsync. Tato rozšiřující metoda přebírá objekt CloudStorageAccount jako parametr. Metoda vytvoří kontejner s názvem podle standardu File Conventions. Obsah kontejneru je zjistitelný pomocí Azure Portal a metod načítání popsaných v tomto článku.

Obvykle v klientské aplikaci vytvořte kontejner, který vytvoří vaše fondy, úlohy a úkoly. Příklad:

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

Ukládání výstupů úkolů

Po vytvoření kontejneru úložiště můžou úkoly uložit výstup do kontejneru pomocí TaskOutputStorage. Tato třída je k dispozici v knihovně Konvence souborů.

V kódu úlohy vytvořte objekt TaskOutputStorage . Po dokončení úkolu volejte TaskOutputStorage. Metoda SaveAsync . Tento krok uloží výstup do Azure Storage.

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

Parametr kindTaskOutputStorage. Metoda SaveAsync kategorizuje trvalé soubory. Existují čtyři předdefinované typy TaskOutputKind : TaskOutput, TaskPreview, TaskLoga TaskIntermediate. Můžete také definovat vlastní kategorie výstupu.

Určete, jaký typ výstupů se má zobrazit při pozdějším dotazování služby Batch. Když pak vypíšete výstupy úkolu, můžete filtrovat podle jednoho z typů výstupu. Můžete například vyfiltrovat " Give me the Preview output for task 109" (Dejte mi náhled výstupu pro úkol 109). Další informace najdete v tématu Načtení výstupních dat.

Typ výstupu také určuje, kde se výstupní soubor zobrazí v Azure Portal. Soubory v kategorii TaskOutput jsou ve výstupních souborech úkolu. Soubory v kategorii TaskLog jsou v části Protokoly úloh.

Ukládání výstupů úloh

Můžete také uložit výstupy přidružené k celé úloze. Například v úloze sloučení úlohy vykreslování videa můžete zachovat plně vykreslený film jako výstup úlohy. Po dokončení úlohy může klientská aplikace vypsat a načíst výstupy úlohy. Klientská aplikace se nemusí dotazovat na jednotlivé úlohy.

Uložte výstup úlohy voláním JobOutputStorage. Metoda SaveAsync . Zadejte JobOutputKind a název souboru. Příklad:

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

Stejně jako u typu TaskOutputKind pro výstupy úkolů použijte typ JobOutputKind ke kategorizaci trvalých souborů úlohy. Později můžete zobrazit seznam konkrétního typu výstupu. Typ JobOutputKind zahrnuje výstupní i náhledové kategorie. Typ také podporuje vytváření vlastních kategorií.

Ukládání protokolů úloh

Můžete také potřebovat zachovat soubory, které se aktualizují během provádění úlohy. Můžete například potřebovat zachovat soubory protokolu nebo stdout.txt a stderr.txt. Knihovna File Conventions poskytuje TaskOutputStorage. Metoda SaveTrackedAsync pro zachování těchto typů souborů. Sledujte aktualizace souboru na uzlu v zadaném intervalu pomocí SaveTrackedAsync. Pak tyto aktualizace uchováte ve službě Azure Storage.

Následující příklad používá SaveTrackedAsync k aktualizaci stdout.txt ve službě Azure Storage každých 15 sekund během provádění úlohy:

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

Nahraďte okomentovaný oddíl Code to process data and produce output file(s) jakýmkoli kódem, který váš úkol normálně dělá. Můžete mít například kód, který stahuje data ze služby Azure Storage a pak provádí transformace nebo výpočty. Tento kód můžete zabalit do using bloku a pravidelně aktualizovat soubor pomocí SaveTrackedAsync.

Agent uzlu je program, který běží na každém uzlu ve fondu. Tento program poskytuje rozhraní pro příkazy a řízení mezi uzlem a službou Batch. Volání Task.Delay je vyžadováno na konci tohoto using bloku. Volání zajistí, že agent uzlu má čas vyprázdnit obsah standardu stdout.txt do souboru na uzlu. Bez tohoto zpoždění je možné vynechat posledních několik sekund výstupu. Toto zpoždění možná nebudete potřebovat u všech souborů.

Když povolíte sledování souborů pomocí SaveTrackedAsync, ve službě Azure Storage se zachovají pouze připojení ke sledovanému souboru. Tuto metodu použijte pouze ke sledování neotáčivých souborů protokolu nebo jiných souborů, do kterých jsou zapsány operacemi připojení na konec souboru.

Načtení výstupních dat

Pokud chcete načíst výstupní soubory pro konkrétní úlohu nebo úlohu, nemusíte znát cestu ve službě Azure Storage ani názvy souborů. Místo toho můžete požádat o výstupní soubory podle ID úkolu nebo úlohy.

Následující příklad kódu iteruje úkoly úlohy. Dále kód vytiskne některé informace o výstupních souborech pro úlohu. Pak kód stáhne soubory z AzureStorage.

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

Zobrazení výstupních souborů v Azure Portal

Pokud výstupní soubory úkolů používají standard Batch File Conventions, můžete soubory zobrazit v Azure Portal.

Pokud chcete povolit zobrazení výstupních souborů na portálu, musíte splňovat následující požadavky:

Aby se výstupní soubory automaticky zobrazovaly v Azure Portal, musíte:

  1. Propojte účet Azure Storage s účtem Batch.
  2. Postupujte podle předdefinovaných zásad vytváření názvů pro kontejnery a soubory služby Azure Storage. Všechny definice najdete v souboru README . Pokud k uchování výstupu použijete knihovnu Konvence souborů, vaše soubory se zachovají podle standardu Konvence souborů.

Zobrazení výstupních souborů a protokolů úkolů v Azure Portal:

  1. Přihlaste se k webu Azure Portal.
  2. Přejděte na úkol, pro který chcete zobrazit výstup.
  3. Vyberte Uložené výstupní soubory nebo Uložené protokoly.

Ukázka kódu

Ukázkový projekt PersistOutputs je jednou z Azure Batch ukázek kódu na GitHubu. Toto řešení sady Visual Studio ukazuje, jak pomocí knihovny Azure Batch File Conventions zachovat výstup úloh do odolného úložiště. Ukázku spustíte takto:

  1. Otevřete projekt v sadě Visual Studio 2019.
  2. V projektu Microsoft.Azure.Batch.Samples.Common přidejte přihlašovací údaje k účtu Batch a Azure Storage do accountSettings.settings.
  3. Sestavte řešení. Řešení zatím nespusouvejte.
  4. Pokud se zobrazí výzva, obnovte všechny balíčky NuGet.
  5. Nahrajte balíček aplikace pro PersistOutputsTask prostřednictvím Azure Portal.
    1. Zahrňte PersistOutputsTask.exe spustitelný soubor a jeho závislá sestavení do balíčku .zip.
    2. Nastavte ID aplikace na PersistOutputsTask.
    3. Nastavte verzi balíčku aplikace na 1.0.
  6. Vyberte Spustit a spusťte projekt.
  7. Po zobrazení výzvy k výběru technologie trvalosti, která se má použít, zadejte 1. Tato možnost spustí ukázku pomocí knihovny File Conventions k zachování výstupu úlohy.

Získání knihovny Batch File Conventions pro .NET

Knihovna Batch File Conventions pro .NET je k dispozici na NuGetu. Knihovna rozšiřuje třídy CloudJob a CloudTask o nové metody. Další informace najdete v referenční dokumentaci ke knihovně File Conventions.

Zdrojový kód knihovny File Conventions je k dispozici na GitHubu.

Další kroky