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á ve službě Azure Batch může při spuštění vytvářet výstupní data. Výstupní data úlohy je často potřeba uložit pro načtení jinými úkoly v úloze, klientskou aplikaci, která úlohu spustila, nebo obojí. Úkoly zapisují výstupní data do systému souborů výpočetního uzlu služby Batch, ale všechna data na uzlu se ztratí, když se přeinstaluje nebo když uzel opustí skupinu. Úkoly můžou mít také dobu uchovávání souborů, po které se odstraní soubory vytvořené úkolem. Z těchto důvodů je důležité uložit výstup úkolu, který budete potřebovat později, do úložiště 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ů ze služby Azure Batch můžete zachovat pomocí knihovny File Conventions pro .NET. Knihovna Konvence souborů 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 úloze i v kódu klienta. V režimu úloh použijte knihovnu k uchování souborů. V klientském režimu použijte knihovnu k výpisu a načtení souborů. Kód úkolu může také načíst výstup upstreamových úloh pomocí knihovny, například ve scénáři závislostí úkolů .

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

Od verze 2017-05-01 podporuje rozhraní API služby Batch trvalé ukládání výstupních dat do služby Azure Storage pro úlohy a úlohy správce úloh, které běží na fondech vytvořených s konfigurací virtuálního počítače. Výstup můžete zachovat v kódu, který vytvoří úlohu. Tato metoda je alternativou k knihovně File Conventions. Klientské aplikace Batch můžete upravit tak, aby zachovaly výstup, aniž byste museli aktualizovat aplikaci, na které je úloha spuštěná. Další informace najdete v tématu Uložení 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 úkolu. Použijte knihovnu pro konvence souborů, když chcete:

  • Upravte kód aplikace, na které je úloha spuštěná, aby se zachovaly soubory.
  • Streamujte data do Služby Azure Storage, zatímco úloha je stále spuštěná.
  • Zachování dat z poolů
  • Vyhledejte a stáhněte výstupní soubory úkolů podle ID nebo účelu v klientské aplikaci nebo jiných úlohách.
  • Zobrazení výstupu úlohy na webu Azure Portal

V jiných scénářích můžete chtít zvážit jiný přístup. Další informace o dalších možnostech najdete v tématu Uložení výstupu úlohy a úkolů do služby Azure Storage.

Co je standard Batch File Conventions?

Standard Batch File Conventions poskytuje schéma pojmenování pro cílové kontejnery a cesty k objektům blob, do kterých se zapisují výstupní soubory. Soubory trvalé v úložišti Azure, které dodržují standard, se dají automaticky zobrazit na webu Azure Portal.

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

Pokud vyvíjíte pomocí jiného jazyka než .NET, můžete ve své aplikaci implementovat standard File Conventions sami. Další informace naleznete v tématu Implementace standardu Batch File Conventions.

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

  1. Přihlaste se do Azure Portalu.
  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 účtu Batch v části Nastavení vyberte Účet úložiště.
  5. Pokud ještě nemáte účet Azure Storage přidružený k vašemu účtu Batch, vyberte Účet úložiště (Žádný).
  6. Vyberte účet Azure Storage, který chcete použít. Pokud chcete dosáhnout nejlepšího výkonu, použijte účet ve stejné oblasti jako účet Batch.

Uchová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. K nahrání výstupu úlohy do kontejneru použijte klientskou knihovnu Azure Storage pro .NET v kódu úkolu.

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é pomocí knihovny File Conventions jsou uchovány ve stejném kontejneru. Pokud se mnoho úloh pokusí ukládat soubory najednou, mohou být uplatněna omezení služby Azure Storage. Další informace najdete v Kontrolním seznamu výkonu a škálovatelnosti pro blob storage.

Vytvořte úložný kontejner

Pokud chcete zachovat výstup úlohy do Služby Azure Storage, nejprve vytvořte kontejner voláním CloudJob. PrepareOutputStorageAsync. Tato metoda rozšíření přebírá jako parametr objekt CloudStorageAccount . Metoda vytvoří kontejner pojmenovaný podle standardu File Conventions. Obsah kontejneru je možné zjistit pomocí webu Azure Portal a metod načítání popsaných v tomto článku.

Obvykle vytvořte kontejner ve vaší klientské aplikaci, který pak vytváří fondy, úlohy a úkoly. Napří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 úlohy ukládat výstup do kontejneru pomocí TaskOutputStorage. Tato třída je k dispozici v knihovně File Conventions.

V kódu úkolu vytvořte TaskOutputStorage objekt. Po dokončení úkolu volejte TaskOutputStorage. Metoda SaveAsync Tento krok uloží výstup do služby 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, TaskLogTaskPreview, a TaskIntermediate. Můžete také definovat vlastní kategorie výstupu.

Určete, jaký typ výstupů se má vypsat při pozdějším dotazování služby Batch. Když pak vypíšete výstupy pro úlohu, můžete filtrovat podle jednoho z typů výstupu. Například vyfiltrujte "Dejte mi náhled výstupu úkolu 109". Další informace naleznete v tématu Načtení výstupních dat.

Typ výstupu také určuje, kde se výstupní soubor zobrazuje na webu Azure Portal. Soubory v kategorii TaskOutput jsou ve výstupních souborech úkolů. Soubory v kategorii TaskLog jsou v protokolech úloh.

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

Můžete také uložit výstupy přidružené k celé úloze. Například ve slučovací úloze ú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. Vaše klientská aplikace nemusí dotazovat jednotlivé úlohy.

Výstup úlohy uložte voláním JobOutputStorage. Metoda SaveAsync Zadejte jobOutputKind a název souboru. Napří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. Tento typ také podporuje vytváření vlastních kategorií.

Ukládání protokolů úloh

Je také možné, že budete muset 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 metodu TaskOutputStorage.SaveTrackedAsync pro zachování těchto typů souborů. Sledujte aktualizace souboru na uzlu v zadaném intervalu pomocí saveTrackedAsync. Potom tyto aktualizace uložte do služby Azure Storage.

Následující příklad používá metodu 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);
}

Zakomentovaný oddíl Code to process data and produce output file(s) nahraďte 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ý je spuštěn na každém uzlu ve fondu. Tento program poskytuje rozhraní příkazového a řídicího rozhraní mezi uzlem a službou Batch. Volání Task.Delay se vyžaduje na konci tohoto using bloku. Volání zajišťuje, že agent uzlu má čas vyprázdnit obsah standardního stdout.txt 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 pro všechny soubory.

Když povolíte sledování souborů pomocí SaveTrackedAsync, pouze přírůstky k sledovanému souboru jsou uchovávány v Azure Storage. Tuto metodu použijte pouze ke sledování nerotujících souborů protokolu nebo jiných souborů, které jsou zapisované pomocí operací připojení ke konci 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žadovat soubory výstupu podle ID úlohy nebo úkolu.

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ů na webu Azure Portal

Pokud výstupní soubory úkolů používají standard Batch File Conventions, můžete je zobrazit na webu 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 na webu Azure Portal, musíte:

  1. Propojte účet Azure Storage s vaším účtem Batch.
  2. Postupujte podle předdefinovaných zásad vytváření názvů pro kontejnery a soubory Azure Storage. Zkontrolujte soubor README pro všechny definice. Pokud k zachování výstupu použijete knihovnu File Conventions , budou soubory zachovány podle standardu File Conventions.

Zobrazení výstupních souborů úloh a protokolů na webu Azure Portal:

  1. Přihlaste se do Azure Portalu.
  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 ukázek kódu služby Azure Batch na GitHubu. Toto řešení sady Visual Studio ukazuje, jak pomocí knihovny Azure Batch File Conventions zachovat výstup úlohy do odolného úložiště. Ukázku spustíte takto:

  1. Otevřete projekt v Visual Studio 2019.
  2. Přidejte přihlašovací údaje účtu Batch a Azure Storage do nastavení AccountSettings.settings v projektu Microsoft.Azure.Batch.Samples.Common .
  3. Sestavte řešení. Řešení zatím nespusívejte.
  4. Pokud se zobrazí výzva, obnovte všechny balíčky NuGet.
  5. Nahrajte balíček aplikace pro PersistOutputsTask prostřednictvím webu Azure Portal.
    1. PersistOutputsTask.exe Do balíčku .zip zahrňte spustitelný soubor a jeho závislá sestavení.
    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