Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een taak die in Azure Batch wordt uitgevoerd, kan uitvoergegevens produceren wanneer deze wordt uitgevoerd. Taakuitvoergegevens moeten vaak worden opgeslagen voor het ophalen door andere taken in de taak, de clienttoepassing die de taak heeft uitgevoerd, of beide. Taken schrijven uitvoergegevens naar het bestandssysteem van een Batch-rekenknooppunt, maar alle gegevens van het knooppunt gaan verloren wanneer het opnieuw geïnstalleerd wordt of wanneer het knooppunt de pool verlaat. Taken kunnen ook een bewaarperiode voor bestanden hebben, waarna bestanden die door de taak zijn gemaakt, worden verwijderd. Om deze redenen is het belangrijk om taakuitvoer te behouden die u later nodig hebt voor een gegevensarchief zoals Azure Storage.
Zie Batch-accounts en Azure Storage-accounts voor opties voor opslagaccounts in Batch.
U kunt taakgegevens uit Azure Batch behouden met behulp van de file conventions-bibliotheek voor .NET. De file conventions-bibliotheek vereenvoudigt het proces van het opslaan en ophalen van taakuitvoergegevens in Azure Storage. U kunt de bibliotheek Bestandsconventies gebruiken in zowel taak- als clientcode. Gebruik de bibliotheek in de taakmodus om bestanden te behouden. Gebruik de bibliotheek in de clientmodus om bestanden weer te geven en op te halen. Uw taakcode kan ook de uitvoer van upstream-taken ophalen met behulp van de bibliotheek, zoals in een scenario met taakafhankelijkheden .
Als u met de bibliotheek Bestandsconventies uitvoerbestanden wilt ophalen, zoekt u de bestanden voor een opdracht of taak. U hoeft de namen of locaties van de bestanden niet te kennen. In plaats daarvan kunt u de bestanden op id en doel weergeven. Geef bijvoorbeeld alle tussenliggende bestanden voor een bepaalde taak weer. Of haal een voorbeeldbestand op voor een bepaalde taak.
Vanaf versie 2017-05-01 ondersteunt de Batch-service-API persistente uitvoergegevens naar Azure Storage voor taken en jobbeheertaken die worden uitgevoerd op pools die worden uitgevoerd met de configuratie van de virtuele machine (VM). U kunt uitvoer behouden vanuit de code waarmee een taak wordt gemaakt. Deze methode is een alternatief voor de file conventions-bibliotheek. U kunt uw Batch-clienttoepassingen wijzigen om uitvoer te behouden zonder dat u de toepassing die uw taak uitvoert, moet bijwerken. Zie Taakgegevens behouden in Azure Storage met de Batch-service-API voor meer informatie.
Gebruiksvoorbeelden voor bibliotheken
Azure Batch biedt meerdere manieren om taakuitvoer te behouden. Gebruik de Bestandsconventies-bibliotheek als u dit wilt:
- Wijzig de code voor de toepassing die door uw taak wordt uitgevoerd om bestanden te behouden.
- Gegevens streamen naar Azure Storage terwijl de taak nog steeds wordt uitgevoerd.
- Gegevens uit pools behouden.
- Zoek en download taakuitvoerbestanden op ID of doel in uw klantapplicatie of in andere taken.
- Taakuitvoer weergeven in Azure Portal.
Voor andere scenario's kunt u een andere benadering overwegen. Zie Taak- en taakresultaten bewaren in Azure Storage voor meer informatie over andere opties.
Wat is de standaard voor Batch File Conventions?
De standaard Batch File Conventions biedt een naamgevingsschema voor de doelcontainers en blobpaden waarnaar uw uitvoerbestanden worden geschreven. Bestanden die worden bewaard in Azure Storage die voldoen aan de standaard, kunnen automatisch worden weergegeven in Azure Portal.
De file conventions-bibliotheek voor .NET noemt automatisch uw opslagcontainers en taakuitvoerbestanden volgens de standaard. De bibliotheek biedt ook methoden voor het uitvoeren van query's op uitvoerbestanden in Azure Storage. U kunt een query uitvoeren op job-id, taak-id of doel.
Als u ontwikkelt met een andere taal dan .NET, kunt u de standaard bestandsconventies zelf implementeren in uw toepassing. Zie De standaard batchbestandsconventies implementeren voor meer informatie.
Een Azure Storage-account koppelen
Als u uitvoergegevens wilt behouden naar Azure Storage met behulp van de File Conventions-bibliotheek, koppelt u eerst een Azure Storage-account aan uw Batch-account.
- Meld u aan bij het Azure-portaal.
- Zoek en selecteer Batch in de zoekbalk.
- Selecteer het Batch-account dat u wilt koppelen met Azure Storage.
- Selecteer op de pagina Batch-account onder Instellingen de optie Opslagaccount.
- Als u nog geen Azure Storage-account hebt gekoppeld aan uw Batch-account, selecteert u Opslagaccount (geen).
- Selecteer het Azure Storage-account dat u wilt gebruiken. Gebruik voor de beste prestaties een account in dezelfde regio als het Batch-account.
Uitvoergegevens behouden
U kunt taak- en taakuitvoergegevens persistent maken met de bestandsconventiesbibliotheek. Maak eerst een container in Azure Storage. Sla vervolgens de uitvoer op in de container. Gebruik de Azure Storage-clientbibliotheek voor .NET in uw taakcode om de taakuitvoer naar de container te uploaden.
Zie Aan de slag met Azure Blob Storage met behulp van .NET voor meer informatie over het werken met containers en blobs in Azure Storage.
Alle werkzaamheden en taakuitvoer die bewaard worden met de File Conventions-bibliotheek, worden opgeslagen in dezelfde container. Als een groot aantal taken tegelijkertijd bestanden probeert op te slaan, kunnen limieten voor Azure Storage worden afgedwongen. Zie de controlelijst voor prestaties en schaalbaarheid voor Blob Storage voor meer informatie.
Opslagcontainer maken
Als u taakuitvoer naar Azure Storage wilt behouden, maakt u eerst een container door CloudJob aan te roepen. PrepareOutputStorageAsync. Deze extensiemethode gebruikt een CloudStorageAccount-object als parameter. Met de methode maakt u een container met de naam volgens de standaard bestandsconventies. De inhoud van de container kan worden gedetecteerd door Azure Portal en de methoden voor het ophalen die in dit artikel worden beschreven.
Maak doorgaans een container in uw clienttoepassing aan, die uw pools, taken en taken creëert. Voorbeeld:
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);
Taakuitvoer opslaan
Nadat u uw opslagcontainer hebt gemaakt, kunnen taken uitvoer opslaan in de container met behulp van TaskOutputStorage. Deze klasse is beschikbaar in de File Conventions-bibliotheek.
Maak in uw taakcode een TaskOutputStorage-object . Wanneer de taak het werk heeft voltooid, roept u TaskOutputStorage aan. SaveAsync-methode . Met deze stap wordt de uitvoer opgeslagen in 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");
De kind parameter van TaskOutputStorage.De saveAsync-methode categoriseert de persistente bestanden. Er zijn vier vooraf gedefinieerde TaskOutputKind-typen : TaskOutput, TaskPreview, TaskLogen TaskIntermediate. u kunt ook aangepaste categorieën van uitvoer definiëren.
Geef op welk type uitvoer u wilt weergeven wanneer u later een query uitvoert op Batch. Wanneer u de uitvoer voor een taak weergeeft, kunt u filteren op een van de uitvoertypen. Filter bijvoorbeeld op 'Geef mij de voorbeelduitvoer voor taak 109'. Zie Uitvoergegevens ophalen voor meer informatie.
Het uitvoertype bepaalt ook waar een uitvoerbestand wordt weergegeven in Azure Portal. Bestanden in de categorie TaskOutput bevinden zich onder Taakuitvoerbestanden. Bestanden in de categorie TaskLog bevinden zich onder Taaklogboeken.
Taakresultaten opslaan
U kunt ook de uitvoer opslaan die aan een hele taak is gekoppeld. In de samenvoegtaak van een filmweergavetaak kunt u bijvoorbeeld de volledig gerenderde film behouden als taakuitvoer. Wanneer uw taak is voltooid, kan uw clienttoepassing de uitvoer voor de taak weergeven en ophalen. Uw clienttoepassing hoeft geen query's uit te voeren op de afzonderlijke taken.
Sla taakuitvoer op door de JobOutputStorage aan te roepen. SaveAsync-methode . Geef de JobOutputKind en bestandsnaam aan. Voorbeeld:
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");
Net als bij het type TaskOutputKind voor taakuitvoer, gebruikt u het type JobOutputKind om de persistente bestanden van een taak te categoriseren. Later kunt u een specifiek type uitvoer weergeven. Het type JobOutputKind bevat zowel uitvoer- als preview-categorieën. Het type biedt ook ondersteuning voor het maken van aangepaste categorieën.
Taaklogboeken opslaan
Mogelijk moet u ook bestanden behouden die worden bijgewerkt tijdens de uitvoering van een taak. U moet bijvoorbeeld logboekbestanden behouden, of stdout.txt en stderr.txt. De file conventions-bibliotheek biedt de TaskOutputStorage. SaveTrackedAsync-methode om dit soort bestanden te behouden. Houd bij welke updates er op een bestand plaatsvinden op het knooppunt met een gespecificeerd interval met SaveTrackedAsync. Bewaar deze updates vervolgens in Azure Storage.
In het volgende voorbeeld wordt SaveTrackedAsync gebruikt om elke 15 seconden in Azure Storage bij te werken stdout.txt tijdens de uitvoering van de taak:
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);
}
Vervang de sectie Code to process data and produce output file(s) met opmerkingen door de code die uw taak normaal doet. U hebt bijvoorbeeld code waarmee gegevens uit Azure Storage worden gedownload en vervolgens transformaties of berekeningen worden uitgevoerd. U kunt deze code in een using blok verpakken om periodiek een bestand bij te werken met SaveTrackedAsync.
De knooppuntagent is een programma dat wordt uitgevoerd op elk knooppunt in de pool. Dit programma biedt de opdracht- en besturingsinterface tussen het knooppunt en de Batch-service. De Task.Delay aanroep is vereist aan het einde van dit using blok. De aanroep zorgt ervoor dat de knooppuntagent tijd heeft om de inhoud van het standaardbestand op het stdout.txt knooppunt leeg te maken. Zonder deze vertraging is het mogelijk om de laatste paar seconden uitvoer te missen. Mogelijk hebt u deze vertraging niet nodig voor alle bestanden.
Wanneer u bestandsbijhouding inschakelt met SaveTrackedAsync, worden alleen toevoegingen aan het bijgehouden bestand naar Azure Storage opgeslagen. Gebruik deze methode alleen voor het bijhouden van niet-roterende logboekbestanden of andere bestanden waarnaar wordt geschreven met toevoegbewerkingen aan het einde van het bestand.
Uitvoergegevens ophalen
Als u uitvoerbestanden voor een specifieke taak of taak wilt ophalen, hoeft u het pad niet te kennen in Azure Storage of bestandsnamen. In plaats daarvan kunt u uitvoerbestanden op taak- of taak-id aanvragen.
De volgende voorbeeldcode doorloopt de taken van een opdracht. Vervolgens wordt met de code informatie over de uitvoerbestanden voor de taak afgedrukt. Vervolgens downloadt de code de bestanden uit 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();
}
}
Uitvoerbestanden weergeven in Azure Portal
Als uw taakuitvoerbestanden gebruikmaken van de standaard Batch-bestandsconventies, kunt u de bestanden bekijken in Azure Portal.
Als u de weergave van uw uitvoerbestanden in de portal wilt inschakelen, moet u aan de volgende vereisten voldoen:
Als uitvoerbestanden automatisch worden weergegeven in Azure Portal, moet u het volgende doen:
- Koppel een Azure Storage-account aan uw Batch-account.
- Volg de vooraf gedefinieerde naamconventies voor Azure Storage-containers en -bestanden. Bekijk de LEESMIJ voor alle definities. Als u de file conventions-bibliotheek gebruikt om de uitvoer te behouden, blijven uw bestanden behouden volgens de standaard bestandsconventies.
Uitvoerbestanden en logboeken van taken weergeven in Azure Portal:
- Meld u aan bij het Azure-portaal.
- Ga naar de taak waarvoor u de uitvoer wilt weergeven.
- Selecteer Opgeslagen uitvoerbestanden of Opgeslagen logboeken.
Codevoorbeeld
Het persistOutputs-voorbeeldproject is een van de Azure Batch-codevoorbeelden op GitHub. Deze Visual Studio-oplossing laat zien hoe u de Azure Batch File Conventions-bibliotheek gebruikt om taakuitvoer naar duurzame opslag te behouden. Voer de volgende stappen uit om het voorbeeld uit te voeren:
- Open het project in Visual Studio 2019.
- Voeg de referenties van uw Batch- en Azure Storage-account toe aan AccountSettings.settings in het project Microsoft.Azure.Batch.Samples.Common .
- Bouw de oplossing. Voer de oplossing nog niet uit.
- Als u hierom wordt gevraagd, herstelt u NuGet-pakketten.
- Upload een toepassingspakket voor PersistOutputsTask via Azure Portal.
- Neem het
PersistOutputsTask.exeuitvoerbare bestand inclusief de bijbehorende afhankelijke assembly's op in het .zip-pakket. - Stel de toepassings-id in op
PersistOutputsTask. - Stel de versie van het toepassingspakket in op
1.0.
- Neem het
- Selecteer Starten om het project uit te voeren.
- Wanneer u wordt gevraagd om de persistentietechnologie te selecteren die u wilt gebruiken, voert u 1 in. Met deze optie wordt het voorbeeld uitgevoerd met behulp van de file conventions-bibliotheek om taakuitvoer te behouden.
De Batch File Conventions-bibliotheek voor .NET ophalen
De Batch File Conventions-bibliotheek voor .NET is beschikbaar op NuGet. De bibliotheek breidt de klassen CloudJob en CloudTask uit met nieuwe methoden. Raadpleeg de naslagdocumentatie van de bibliotheek voor bestandsconventies voor meer informatie.
De broncode van de File Conventions-bibliotheek is beschikbaar op GitHub.