Udostępnij za pośrednictwem


Utrwalanie danych zadań i zadań w usłudze Azure Storage przy użyciu biblioteki Konwencji plików usługi Batch dla platformy .NET

Zadanie uruchomione w Azure Batch może generować dane wyjściowe po uruchomieniu. Dane wyjściowe zadania często muszą być przechowywane do pobierania przez inne zadania podrzędne w zadaniu, aplikację kliencą, która wykonała zadanie lub oba te zadania. Zadania zapisują dane wyjściowe w systemie plików węzła obliczeniowego usługi Batch, ale wszystkie dane w węźle są tracone, gdy jest odtwarzany z obrazu lub gdy węzeł opuszcza pulę. Zadania mogą również mieć okres przechowywania plików, po którym pliki utworzone przez zadanie są usuwane. Z tych powodów ważne jest utrwalanie danych wyjściowych zadania, które będą potrzebne później w magazynie danych, takim jak Usługa Azure Storage.

Aby uzyskać informacje o opcjach konta magazynu w usłudze Batch, zobacz Konta usługi Batch i konta usługi Azure Storage.

Dane zadań można utrwalać z Azure Batch przy użyciu biblioteki Konwencje plików dla platformy .NET. Biblioteka File Conventions upraszcza proces przechowywania i pobierania danych wyjściowych zadania w usłudze Azure Storage. Bibliotekę Konwencje plików można używać zarówno w kodzie zadania, jak i klienta. W trybie zadania użyj biblioteki do utrwalania plików. W trybie klienta użyj biblioteki, aby wyświetlić listę i pobrać pliki. Kod zadania może również pobierać dane wyjściowe zadań nadrzędnych przy użyciu biblioteki, na przykład w scenariuszu zależności zadań .

Aby pobrać pliki wyjściowe z biblioteką Konwencje plików, znajdź pliki zadania lub zadania. Nie musisz znać nazw ani lokalizacji plików. Zamiast tego możesz wyświetlić listę plików według identyfikatora i celu. Na przykład wyświetl listę wszystkich plików pośrednich dla danego zadania. Możesz też pobrać plik podglądu dla danego zadania.

Począwszy od wersji 2017-05-01, interfejs API usługi Batch obsługuje utrwalanie danych wyjściowych w usłudze Azure Storage na potrzeby zadań podrzędnych i zadań menedżera zadań uruchamianych w pulach utworzonych przy użyciu konfiguracji maszyny wirtualnej. Dane wyjściowe można utrwały z poziomu kodu, który tworzy zadanie. Ta metoda jest alternatywą dla biblioteki Konwencji plików. Aplikacje klienckie usługi Batch można modyfikować tak, aby utrwalały dane wyjściowe bez konieczności aktualizowania aplikacji uruchomionej przez zadanie. Aby uzyskać więcej informacji, zobacz Utrwalanie danych zadań w usłudze Azure Storage przy użyciu interfejsu API usługi Batch.

Przypadki użycia biblioteki

Azure Batch zapewnia wiele sposobów utrwalania danych wyjściowych zadania. Użyj biblioteki Konwencje plików, jeśli chcesz:

  • Zmodyfikuj kod dla aplikacji, która jest uruchomiona, aby utrwałać pliki.
  • Przesyłanie strumieniowe danych do usługi Azure Storage, gdy zadanie jest nadal uruchomione.
  • Utrwalanie danych z pul.
  • Lokalizowanie i pobieranie plików wyjściowych zadań według identyfikatora lub celu w aplikacji klienckiej lub innych zadaniach.
  • Wyświetl dane wyjściowe zadania w Azure Portal.

W przypadku innych scenariuszy warto rozważyć inne podejście. Aby uzyskać więcej informacji na temat innych opcji, zobacz Utrwalanie danych wyjściowych zadania i zadań podrzędnych w usłudze Azure Storage.

Jaki jest standard konwencji plików wsadowych?

Standard Batch File Conventions zapewnia schemat nazewnictwa dla kontenerów docelowych i ścieżek obiektów blob, do których zapisywane są pliki wyjściowe. Pliki utrwalone w usłudze Azure Storage, które są zgodne ze standardem, są automatycznie widoczne w Azure Portal.

Biblioteka Konwencji plików dla platformy .NET automatycznie nadaje kontenerom magazynu nazwy i plikom wyjściowym zadań zgodnie ze standardem. Biblioteka udostępnia również metody wykonywania zapytań dotyczących plików wyjściowych w usłudze Azure Storage. Zapytania można wykonywać według identyfikatora zadania, identyfikatora zadania lub celu.

Jeśli tworzysz oprogramowanie przy użyciu języka innego niż .NET, możesz zaimplementować standard Konwencji plików samodzielnie w aplikacji. Aby uzyskać więcej informacji, zobacz Implementowanie standardu Konwencji plików wsadowych.

Aby utrwalać dane wyjściowe w usłudze Azure Storage przy użyciu biblioteki File Conventions, najpierw połącz konto usługi Azure Storage z kontem usługi Batch.

  1. Zaloguj się do Azure portal.
  2. Wyszukaj i wybierz pozycję Batch na pasku wyszukiwania.
  3. Wybierz konto usługi Batch, aby połączyć się z usługą Azure Storage.
  4. Na stronie Konto usługi Batch w obszarze Ustawienia wybierz pozycję Konto magazynu.
  5. Jeśli nie masz jeszcze konta usługi Azure Storage skojarzonego z kontem usługi Batch, wybierz pozycję Konto magazynu (brak).
  6. Wybierz konto usługi Azure Storage do użycia. Aby uzyskać najlepszą wydajność, użyj konta w tym samym regionie co konto usługi Batch.

Utrwalanie danych wyjściowych

Dane wyjściowe zadania i zadania można utrwalać za pomocą biblioteki Konwencje plików. Najpierw utwórz kontener w usłudze Azure Storage. Następnie zapisz dane wyjściowe w kontenerze. Użyj biblioteki klienta usługi Azure Storage dla platformy .NET w kodzie zadania, aby przekazać dane wyjściowe zadania do kontenera.

Aby uzyskać więcej informacji na temat pracy z kontenerami i obiektami blob w usłudze Azure Storage, zobacz Rozpoczynanie pracy z usługą Azure Blob Storage przy użyciu platformy .NET.

Wszystkie dane wyjściowe zadania i zadania utrwalone w bibliotece Konwencji plików są przechowywane w tym samym kontenerze. Jeśli duża liczba zadań próbuje utrwałać pliki w tym samym czasie, limity ograniczania usługi Azure Storage mogą być wymuszane. Aby uzyskać więcej informacji, zobacz Lista kontrolna dotycząca wydajności i skalowalności dla usługi Blob Storage.

Tworzenie kontenera magazynu

Aby utrwały dane wyjściowe zadania w usłudze Azure Storage, najpierw utwórz kontener przez wywołanie zadania CloudJob. PrepareOutputStorageAsync. Ta metoda rozszerzenia przyjmuje obiekt CloudStorageAccount jako parametr. Metoda tworzy kontener o nazwie zgodnie ze standardem File Conventions. Zawartość kontenera jest wykrywalna przez Azure Portal i metody pobierania opisane w tym artykule.

Zazwyczaj należy utworzyć kontener w aplikacji klienckiej, który tworzy pule, zadania i zadania podrzędne. Przykład:

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

Przechowywanie danych wyjściowych zadań

Po utworzeniu kontenera magazynu zadania mogą zapisywać dane wyjściowe w kontenerze przy użyciu elementu TaskOutputStorage. Ta klasa jest dostępna w bibliotece Konwencji plików.

W kodzie zadania utwórz obiekt TaskOutputStorage . Po zakończeniu pracy zadania wywołaj metodę TaskOutputStorage. SaveAsync , metoda. W tym kroku dane wyjściowe są zapisywane w usłudze 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 kategoryzuje utrwalone pliki. Istnieją cztery wstępnie zdefiniowane typy TaskOutputKind : TaskOutput, TaskPreview, TaskLogi TaskIntermediate. Można również zdefiniować niestandardowe kategorie danych wyjściowych.

Określ typ danych wyjściowych, które mają być wyświetlane podczas wykonywania zapytań w usłudze Batch później. Następnie po wyświetleniu listy danych wyjściowych zadania można filtrować według jednego z typów danych wyjściowych. Na przykład przefiltruj wartość "Give me the preview output for task 109" (Nadaj mi dane wyjściowe podglądu zadania 109). Aby uzyskać więcej informacji, zobacz Pobieranie danych wyjściowych.

Typ danych wyjściowych określa również, gdzie w Azure Portal pojawia się plik wyjściowy. Pliki w kategorii TaskOutput znajdują się w obszarze Pliki wyjściowe zadania. Pliki w kategorii Dziennik zadań znajdują się w obszarze Dzienniki zadań.

Przechowywanie danych wyjściowych zadania

Można również przechowywać dane wyjściowe skojarzone z całym zadaniem. Na przykład w zadaniu scalania zadania renderowania filmów można utrwały w pełni renderowany film jako dane wyjściowe zadania. Po zakończeniu zadania aplikacja kliencka może wyświetlić listę i pobrać dane wyjściowe zadania. Aplikacja kliencka nie musi wykonywać zapytań dotyczących poszczególnych zadań.

Przechowuj dane wyjściowe zadania, wywołując element JobOutputStorage. SaveAsync , metoda. Określ wartość JobOutputKind i nazwę pliku. Przykład:

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

Podobnie jak w przypadku typu TaskOutputKind dla danych wyjściowych zadania, użyj typu JobOutputKind , aby kategoryzować utrwalone pliki zadania. Później możesz wyświetlić listę określonego typu danych wyjściowych. Typ JobOutputKind zawiera zarówno kategorie danych wyjściowych, jak i podglądu. Typ obsługuje również tworzenie kategorii niestandardowych.

Przechowywanie dzienników zadań

Może być również konieczne utrwalanie plików, które są aktualizowane podczas wykonywania zadania. Na przykład może być konieczne utrwalanie plików dziennika lub stdout.txt .stderr.txt Biblioteka Konwencje plików zawiera element TaskOutputStorage. SaveTrackedAsync , metoda do utrwalania tego rodzaju plików. Śledzenie aktualizacji pliku w węźle w określonym interwale za pomocą polecenia SaveTrackedAsync. Następnie utrwali te aktualizacje w usłudze Azure Storage.

W poniższym przykładzie użyto metody SaveTrackedAsync do aktualizacji stdout.txt w usłudze Azure Storage co 15 sekund podczas wykonywania zadania:

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

Zastąp skomentowaną sekcję Code to process data and produce output file(s) kodem, który zwykle wykonuje zadanie. Możesz na przykład mieć kod, który pobiera dane z usługi Azure Storage, a następnie wykonuje przekształcenia lub obliczenia. Ten kod można opakowować w bloku, using aby okresowo aktualizować plik za pomocą polecenia SaveTrackedAsync.

Agent węzła to program uruchamiany w każdym węźle w puli. Ten program udostępnia interfejs wiersza polecenia i sterowania między węzłem a usługą Batch. Wywołanie Task.Delay jest wymagane na końcu tego using bloku. Wywołanie zapewnia, że agent węzła ma czas opróżnienia zawartości standardu do stdout.txt pliku w węźle. Bez tego opóźnienia można pominąć ostatnie kilka sekund danych wyjściowych. To opóźnienie może nie być konieczne dla wszystkich plików.

Po włączeniu śledzenia plików za pomocą funkcji SaveTrackedAsynctylko dołączane do śledzonego pliku są utrwalane w usłudze Azure Storage. Tej metody należy używać tylko do śledzenia nie rotacyjnych plików dziennika lub innych plików, które są zapisywane w programie z operacjami dołączania na końcu pliku.

Pobieranie danych wyjściowych

Aby pobrać pliki wyjściowe dla określonego zadania lub zadania, nie musisz znać ścieżki w usłudze Azure Storage ani nazw plików. Zamiast tego można zażądać plików wyjściowych według identyfikatora zadania lub zadania.

Poniższy przykładowy kod wykonuje iterację po zadaniach zadania. Następnie kod wyświetla pewne informacje o plikach wyjściowych zadania. Następnie kod pobiera pliki z usługi 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();
    }
}

Wyświetlanie plików wyjściowych w Azure Portal

Jeśli pliki wyjściowe zadania korzystają ze standardu Konwencje plików usługi Batch, możesz wyświetlić pliki w Azure Portal.

Aby włączyć wyświetlanie plików wyjściowych w portalu, należy spełnić następujące wymagania:

Aby pliki wyjściowe są automatycznie wyświetlane w Azure Portal, należy wykonać następujące czynności:

  1. Połącz konto usługi Azure Storage z kontem usługi Batch.
  2. Postępuj zgodnie ze wstępnie zdefiniowanymi konwencjami nazewnictwa dla kontenerów i plików usługi Azure Storage. Przejrzyj plik README dla wszystkich definicji. Jeśli używasz biblioteki Konwencje plików do utrwalania danych wyjściowych, pliki są utrwalane zgodnie ze standardem Konwencje plików.

Aby wyświetlić pliki wyjściowe i dzienniki zadań w Azure Portal:

  1. Zaloguj się do Azure portal.
  2. Przejdź do zadania, dla którego chcesz wyświetlić dane wyjściowe.
  3. Wybierz pozycję Zapisane pliki wyjściowe lub Zapisane dzienniki.

Przykład kodu

Przykładowy projekt PersistOutputs jest jednym z przykładów kodu Azure Batch w witrynie GitHub. To rozwiązanie programu Visual Studio pokazuje, jak używać biblioteki Azure Batch File Conventions do utrwalania danych wyjściowych zadań w trwałym magazynie. Aby uruchomić przykład, wykonaj następujące kroki:

  1. Otwórz projekt w programie Visual Studio 2019.
  2. Dodaj poświadczenia konta usługi Batch i usługi Azure Storage do pozycji AccountSettings.settings w projekcie Microsoft.Azure.Batch.Samples.Common .
  3. Skompiluj rozwiązanie. Nie uruchamiaj jeszcze rozwiązania.
  4. Jeśli zostanie wyświetlony monit, przywróć wszystkie pakiety NuGet.
  5. Przekaż pakiet aplikacji dla elementu PersistOutputsTask za pośrednictwem Azure Portal.
    1. Uwzględnij plik PersistOutputsTask.exe wykonywalny i jego zależne zestawy w pakiecie .zip.
    2. Ustaw identyfikator aplikacji na PersistOutputsTask.
    3. Ustaw wersję pakietu aplikacji na 1.0wartość .
  6. Wybierz pozycję Rozpocznij , aby uruchomić projekt.
  7. Po wyświetleniu monitu o wybranie technologii trwałości do użycia wprowadź wartość 1. Ta opcja uruchamia przykład przy użyciu biblioteki File Conventions w celu utrwalania danych wyjściowych zadania.

Pobieranie biblioteki konwencji plików usługi Batch dla platformy .NET

Biblioteka Konwencji plików usługi Batch dla platformy .NET jest dostępna w programie NuGet. Biblioteka rozszerza klasy CloudJob i CloudTask o nowe metody. Aby uzyskać więcej informacji, zobacz dokumentację biblioteki konwencji plików.

Kod źródłowy biblioteki File Conventions jest dostępny w witrynie GitHub.

Następne kroki