Dela via


Spara jobb- och uppgiftsdata till Azure Storage med Batch File Conventions-biblioteket för .NET

En aktivitet som körs i Azure Batch kan generera utdata när den körs. Uppgiftsutdata måste ofta lagras för hämtning av andra uppgifter i jobbet, klientprogrammet som körde jobbet eller båda. Uppgifter skriver utdata till filsystemet för en Batch-beräkningsnod, men alla data på noden går förlorade när de återskapas eller när noden lämnar poolen. Aktiviteter kan också ha en filkvarhållningsperiod, varefter filer som skapats av aktiviteten tas bort. Av dessa skäl är det viktigt att spara aktivitetsutdata som du behöver senare till ett datalager, till exempel Azure Storage.

Lagringskontoalternativ i Batch finns i Batch-konton och Azure Storage-konton.

Du kan spara aktivitetsdata från Azure Batch med hjälp av filkonventionsbiblioteket för .NET. Filkonventionsbiblioteket förenklar processen för att lagra och hämta utdata för aktiviteter i Azure Storage. Du kan använda filkonventionsbiblioteket i både uppgifts- och klientkoden. I aktivitetsläge använder du biblioteket för att spara filer. I klientläge använder du biblioteket för att visa och hämta filer. Aktivitetskoden kan också hämta utdata från överordnade aktiviteter med hjälp av biblioteket, till exempel i ett scenario med aktivitetsberoenden .

Om du vill hämta utdatafiler med filkonventionsbiblioteket letar du upp filerna för ett jobb eller en uppgift. Du behöver inte känna till namnen eller platserna för filerna. I stället kan du lista filerna efter ID och syfte. Du kan till exempel visa en lista över alla mellanliggande filer för en viss uppgift. Eller hämta en förhandsgranskningsfil för ett visst jobb.

Från och med version 2017-05-01 har Batch-tjänst-API:et stöd för att spara utdata till Azure Storage för uppgifter och jobbhanteraraktiviteter som körs på pooler som skapats med konfigurationen av den virtuella datorn (VM). Du kan spara utdata från koden som skapar en uppgift. Den här metoden är ett alternativ till filkonventionsbiblioteket. Du kan ändra dina Batch-klientprogram så att de bevarar utdata utan att behöva uppdatera programmet som aktiviteten körs på. Mer information finns i Spara uppgiftsdata till Azure Storage med Batch-tjänst-API:et.

Användningsfall för bibliotek

Azure Batch finns flera sätt att spara aktivitetsutdata. Använd filkonventionsbiblioteket när du vill:

  • Ändra koden för programmet som aktiviteten körs för att spara filer.
  • Strömma data till Azure Storage medan uppgiften fortfarande körs.
  • Spara data från pooler.
  • Leta upp och ladda ned aktivitetsutdatafiler efter ID eller syfte i klientprogrammet eller andra uppgifter.
  • Visa aktivitetsutdata i Azure Portal.

I andra scenarier kanske du vill överväga en annan metod. Mer information om andra alternativ finns i Spara jobb- och uppgiftsutdata till Azure Storage.

Vad är Standard för Batch-filkonventioner?

Standard för Batch-filkonventioner tillhandahåller ett namngivningsschema för målcontainrar och blobsökvägar som utdatafilerna skrivs till. Filer som sparats i Azure Storage som följer standarden kan visas automatiskt i Azure Portal.

Filkonventionsbiblioteket för .NET namnger automatiskt dina lagringscontainrar och aktivitetsutdatafiler enligt standarden. Biblioteket innehåller också metoder för att fråga utdatafiler i Azure Storage. Du kan fråga efter jobb-ID, aktivitets-ID eller syfte.

Om du utvecklar med ett annat språk än .NET kan du implementera filkonventionsstandarden själv i ditt program. Mer information finns i Implementera Standard för Batch-filkonventioner.

Om du vill spara utdata till Azure Storage med hjälp av filkonventionsbiblioteket länkar du först ett Azure Storage-konto till ditt Batch-konto.

  1. Logga in på Azure-portalen.
  2. Sök efter och välj Batch i sökfältet.
  3. Välj det Batch-konto som ska länkas till Azure Storage.
  4. På sidan Batch-konto går du till Inställningar och väljer Lagringskonto.
  5. Om du inte redan har ett Azure Storage-konto associerat med ditt Batch-konto väljer du Lagringskonto (Ingen).
  6. Välj det Azure Storage-konto som ska användas. För bästa prestanda använder du ett konto i samma region som Batch-kontot.

Spara utdata

Du kan spara jobb- och uppgiftsdata med filkonventionsbiblioteket. Skapa först en container i Azure Storage. Spara sedan utdata i containern. Använd Azure Storage-klientbiblioteket för .NET i aktivitetskoden för att ladda upp aktivitetsutdata till containern.

Mer information om hur du arbetar med containrar och blobar i Azure Storage finns i Komma igång med Azure Blob Storage med hjälp av .NET.

Alla jobb- och aktivitetsutdata som sparas med filkonventionsbiblioteket lagras i samma container. Om ett stort antal aktiviteter försöker spara filer samtidigt kan begränsningar för Azure Storage tillämpas. Mer information finns i checklista för prestanda och skalbarhet för Blob Storage.

Skapa lagringscontainer

Om du vill spara aktivitetsutdata till Azure Storage skapar du först en container genom att anropa CloudJob. PrepareOutputStorageAsync. Den här tilläggsmetoden tar ett CloudStorageAccount-objekt som en parameter. Metoden skapar en container med namnet enligt file conventions-standarden. Containerns innehåll kan identifieras av Azure Portal och de hämtningsmetoder som beskrivs i den här artikeln.

Skapa vanligtvis en container i klientprogrammet, som skapar dina pooler, jobb och uppgifter. Exempel:

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

Lagra aktivitetsutdata

När du har skapat lagringscontainern kan aktiviteter spara utdata till containern med Hjälp av TaskOutputStorage. Den här klassen är tillgänglig i filkonventionsbiblioteket.

Skapa ett TaskOutputStorage-objekt i aktivitetskoden. När aktiviteten har slutfört sitt arbete anropar du TaskOutputStorage. SaveAsync-metod . Det här steget sparar utdata till 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");

Parametern kind för TaskOutputStorage. SaveAsync-metoden kategoriserar de sparade filerna. Det finns fyra fördefinierade TaskOutputKind-typer : TaskOutput, TaskPreview, TaskLogoch TaskIntermediate. Du kan också definiera anpassade utdatakategorier.

Ange vilken typ av utdata som ska listas när du frågar Batch senare. När du sedan listar utdata för en aktivitet kan du filtrera på någon av utdatatyperna. Filtrera till exempel på "Ge mig förhandsgranskningsutdata för uppgift 109". Mer information finns i Hämta utdata.

Utdatatypen avgör också var en utdatafil visas i Azure Portal. Filer i kategorin TaskOutput finns under Aktivitetsutdatafiler. Filer i kategorin TaskLog finns under Aktivitetsloggar.

Lagra jobbutdata

Du kan också lagra utdata som är associerade med ett helt jobb. I sammanslagningsaktiviteten för ett filmrenderingsjobb kan du till exempel spara den helt renderade filmen som ett jobbutdata. När jobbet är klart kan klientprogrammet visa och hämta utdata för jobbet. Klientprogrammet behöver inte köra frågor mot de enskilda uppgifterna.

Lagra jobbutdata genom att anropa JobOutputStorage. SaveAsync-metod . Ange JobOutputKind och filnamnet. Exempel:

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

Precis som med typen TaskOutputKind för aktivitetsutdata använder du typen JobOutputKind för att kategorisera ett jobbs sparade filer. Senare kan du visa en lista över en viss typ av utdata. Typen JobOutputKind innehåller både utdata- och förhandsgranskningskategorier. Typen har också stöd för att skapa anpassade kategorier.

Lagra aktivitetsloggar

Du kan också behöva spara filer som uppdateras under körningen av en uppgift. Du kan till exempel behöva spara loggfiler eller stdout.txt och stderr.txt. Filkonventionsbiblioteket tillhandahåller TaskOutputStorage. SaveTrackedAsync-metoden för att bevara den här typen av filer. Spåra uppdateringar av en fil på noden med ett angivet intervall med SaveTrackedAsync. Spara sedan uppdateringarna i Azure Storage.

I följande exempel används SaveTrackedAsync för att uppdatera stdout.txt i Azure Storage var 15:e sekund under körningen av uppgiften:

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

Ersätt det kommenterade avsnittet Code to process data and produce output file(s) med den kod som din uppgift normalt gör. Du kan till exempel ha kod som laddar ned data från Azure Storage och sedan utför transformeringar eller beräkningar. Du kan omsluta den här koden i ett using block för att regelbundet uppdatera en fil med SaveTrackedAsync.

Nodagenten är ett program som körs på varje nod i poolen. Det här programmet tillhandahåller kommando- och kontrollgränssnittet mellan noden och Batch-tjänsten. Anropet Task.Delay krävs i slutet av det här using blocket. Anropet ser till att nodagenten har tid att tömma innehållet i standard till stdout.txt filen på noden. Utan den här fördröjningen går det att missa de senaste sekundernas utdata. Du kanske inte behöver den här fördröjningen för alla filer.

När du aktiverar filspårning med SaveTrackedAsyncsparas endast tillägg i den spårade filen i Azure Storage. Använd endast den här metoden för att spåra icke-roterande loggfiler eller andra filer som skrivs till med tilläggsåtgärder i slutet av filen.

Hämta utdata

Om du vill hämta utdatafiler för en viss uppgift eller ett visst jobb behöver du inte känna till sökvägen i Azure Storage eller filnamnen. I stället kan du begära utdatafiler efter aktivitets- eller jobb-ID.

Följande exempelkod itererar genom ett jobbs uppgifter. Därefter skriver koden ut viss information om utdatafilerna för uppgiften. Sedan hämtar koden filerna från 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();
    }
}

Visa utdatafiler i Azure Portal

Om dina aktivitetsutdatafiler använder Standard för Batch-filkonventioner kan du visa filerna i Azure Portal.

Om du vill aktivera visning av utdatafilerna i portalen måste du uppfylla följande krav:

För att utdatafiler ska visas automatiskt i Azure Portal måste du:

  1. Länka ett Azure Storage-konto till ditt Batch-konto.
  2. Följ de fördefinierade namngivningskonventionerna för Azure Storage-containrar och -filer. Granska README för alla definitioner. Om du använder filkonventionsbiblioteket för att spara dina utdata sparas filerna enligt filkonventionstandarden.

Så här visar du utdatafiler och loggar för aktiviteter i Azure Portal:

  1. Logga in på Azure-portalen.
  2. Gå till den uppgift som du vill visa utdata för.
  3. Välj antingen Sparade utdatafiler eller Sparade loggar.

Kodexempel

Exempelprojektet PersistOutputs är ett av de Azure Batch kodexemplen på GitHub. Den här Visual Studio-lösningen visar hur du använder Azure Batch-filkonventionsbiblioteket för att spara aktivitetsutdata till beständig lagring. Så här kör du exemplet:

  1. Öppna projektet i Visual Studio 2019.
  2. Lägg till dina autentiseringsuppgifter för Batch- och Azure Storage-kontot i AccountSettings.settings i projektet Microsoft.Azure.Batch.Samples.Common .
  3. Skapa lösningen. Kör inte lösningen ännu.
  4. Om du uppmanas till det återställer du alla NuGet-paket.
  5. Ladda upp ett programpaket för PersistOutputsTask via Azure Portal.
    1. Inkludera den PersistOutputsTask.exe körbara filen och dess beroende sammansättningar i .zip-paketet.
    2. Ange program-ID:t till PersistOutputsTask.
    3. Ange programpaketversionen till 1.0.
  6. Välj Starta för att köra projektet.
  7. När du uppmanas att välja den beständighetsteknik som ska användas anger du 1. Det här alternativet kör exemplet med hjälp av filkonventionsbiblioteket för att spara aktivitetsutdata.

Hämta Batch-filkonventionsbiblioteket för .NET

Batch-filkonventionsbiblioteket för .NET är tillgängligt på NuGet. Biblioteket utökar klasserna CloudJob och CloudTask med nya metoder. Mer information finns i referensdokumentationen för filkonventionsbiblioteket.

Källkoden för filkonventionsbiblioteket finns på GitHub.

Nästa steg