Udostępnij za pomocą


Zapisz dane prac i zadań w Azure Storage przy użyciu biblioteki Konwencji plików Batch dla platformy .NET

Zadanie uruchomione w usłudze Azure Batch może generować dane wyjściowe po uruchomieniu. Dane wyjściowe zadania często muszą być przechowywane do pobierania przez inne zadania 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 na węźle zostaną utracone, gdy węzeł zostanie ponownie utworzony lub opuści pulę. Zadania mogą również mieć okres przechowywania plików, po którym pliki utworzone przez zadanie zostaną usunięte. Z tych powodów ważne jest zapisywanie danych wyjściowych zadania, które mogą być potrzebne w przyszłości w magazynie danych, takim jak usługa Azure Storage.

Aby uzyskać informacje o opcjach kont kont magazynowych w Batch, zobacz Konta Batch i konta Azure Storage.

Dane zadań można utrwalać z usługi Azure Batch przy użyciu biblioteki Konwencje plików dla platformy .NET. Biblioteka Konwencji plików upraszcza proces przechowywania i pobierania danych wyjściowych zadania w usłudze Azure Storage. Można używać biblioteki Konwencji Plików 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, gdzie istnieją zależności zadań.

Aby pobrać pliki wyjściowe z biblioteki Konwencji Plików, znajdź pliki dla zlecenia 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 dla zadań i zadań menedżera zadań uruchamianych w pulach utworzonych z konfiguracją maszyny wirtualnej (VM). Dane wyjściowe można utrwalać 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 Azure Storage za pomocą interfejsu API usługi Batch.

Przypadki użycia biblioteki

Usługa Azure Batch udostępnia wiele sposobów utrwalania danych wyjściowych zadań. Użyj biblioteki Konwencji plików, jeśli chcesz:

  • Zmodyfikuj kod aplikacji, w której działa twoje zadanie, aby utrwalać pliki.
  • Przesyłać dane do usługi Azure Storage, gdy zadanie jest nadal w realizacji.
  • Utrwalanie danych z pul.
  • Znajdź i pobierz pliki wyjściowe zadania według identyfikatora lub celu w swojej aplikacji klienckiej lub w ramach innych zadań.
  • Wyświetl dane wyjściowe zadania w witrynie Azure Portal.

W przypadku innych scenariuszy warto rozważyć inne podejście. Aby uzyskać więcej informacji na temat innych opcji, zobacz Przechowywanie wyników zadań i podzadań w usłudze Azure Storage.

Jaki jest standard konwencji plików usługi Batch?

Standard Konwencji plików wsadowych określa schemat nazewnictwa 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 witrynie Azure Portal.

Biblioteka konwencji nazw plików dla platformy .NET automatycznie nazywa kontenery magazynowe i pliki wyjściowe zadań zgodnie z obowiązującym 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 pracy, identyfikatora zadania lub celu.

Jeśli programujesz 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 Konwencji plików, najpierw połącz konto usługi Azure Storage z kontem usługi Batch.

  1. Zaloguj się do portalu Azure.
  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 konta usługi Batch, w sekcji Ustawienia, wybierz 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 zadań i prac można utrwalać za pomocą Biblioteki Konwencji 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 zadań i procesów zapisane za pomocą biblioteki konwencji plików są przechowywane w tym samym kontenerze. Jeśli duża liczba zadań próbuje zapisywać pliki w tym samym czasie, ograniczenia przepustowości usługi Azure Storage mogą zostać nałożone. Aby uzyskać więcej informacji, zobacz Lista kontrolna wydajności i skalowalności dla usługi Blob Storage.

Tworzenie kontenera magazynowego

Aby zapisać dane wyjściowe zadania w usłudze Azure Storage, najpierw utwórz kontener, wywołując metodę CloudJob.PrepareOutputStorageAsync. Ta metoda rozszerzenia przyjmuje obiekt CloudStorageAccount jako parametr. Metoda tworzy kontener o nazwie zgodnie ze standardem File Conventions. Zawartość kontenera można odnaleźć za pomocą witryny Azure Portal i metod pobierania opisanych w tym artykule.

Zazwyczaj utwórz kontener w aplikacji klienckiej, który tworzy pule, prace i zadania. Na 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 pamięci masowej, zadania mogą zapisywać dane wyjściowe w kontenerze przy użyciu TaskOutputStorage. Ta klasa jest dostępna w bibliotece Konwencji plików.

W kodzie zadania utwórz obiekt TaskOutputStorage . Po zakończeniu wykonywania zadania, wywołaj metodę TaskOutputStorage.SaveAsync. 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 zapytania 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 filtruj do "Pokaż mi wynik podglądu dla zadania 109." Aby uzyskać więcej informacji, zobacz Pobieranie danych wyjściowych.

Typ danych wyjściowych określa również miejsce wyświetlania pliku wyjściowego w witrynie Azure Portal. Pliki w kategorii TaskOutput znajdują się w obszarze Pliki wyjściowe zadania. Pliki w kategorii TaskLog znajdują się w obszarze Dzienniki zadań.

Przechowywanie wyników zadań

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 utrwalać 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ń.

Zapisz wyniki zadania, wywołując metodę JobOutputStorage.SaveAsync. Określ nazwę jobOutputKind i nazwę pliku. Na 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ć określony typ danych wyjściowych. Typ JobOutputKind zawiera zarówno kategorie danych wyjściowych, jak i wersji zapoznawczej. 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 i stderr.txt. Biblioteka Konwencji Plików oferuje metodę TaskOutputStorage.SaveTrackedAsync do zapisywania tego rodzaju plików. Śledzenie aktualizacji pliku w węźle w określonym interwale za pomocą polecenia SaveTrackedAsync. Następnie zapisz 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 używasz do wykonania zadania. Na przykład możesz 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 using bloku, aby okresowo aktualizować plik za pomocą polecenia SaveTrackedAsync.

Agent węzła to program uruchamiany na każdym węźle w puli. Ten program udostępnia interfejs poleceń 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 na opróżnienie zawartości standardu stdout.txt do pliku w węźle. Bez tego opóźnienia można przegapić 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ą polecenia SaveTrackedAsync, tylko dodatki do śledzonego pliku są zapisywane w usłudze Azure Storage. Tej metody należy używać tylko do śledzenia nierotujących się plików dziennika lub innych plików, do których zapis odbywa się poprzez dołączanie danych na końcu.

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 żądać plików wyjściowych według identyfikatora zadania lub pracy.

Poniższy przykładowy kod iteruje przez zadania pracy. 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 witrynie Azure Portal

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

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

Aby pliki wyjściowe były automatycznie wyświetlane w portalu Azure, musisz zrobić:

  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 Konwencji plików do utrwalania danych wyjściowych, pliki są utrwalane zgodnie ze standardem Konwencji plików.

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

  1. Zaloguj się do portalu Azure.
  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 usługi 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 magazynie trwałym. 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 pliku 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 portalu Azure.
    1. Uwzględnij wykonywalny plik PersistOutputsTask.exe i jego zależne zestawy w pakiecie .zip.
    2. Ustaw identyfikator aplikacji na PersistOutputsTask.
    3. Ustaw wersję pakietu aplikacji na 1.0.
  6. Wybierz pozycję Rozpocznij , aby uruchomić projekt.
  7. Po wyświetleniu monitu o wybranie technologii perystencji do użycia, wprowadź 1. Ta opcja uruchamia przykład przy użyciu biblioteki File Conventions w celu utrwalania danych wyjściowych zadania.

Pobierz bibliotekę konwencji plików wsadowych dla platformy .NET

Biblioteka konwencji plików wsadowych dla platformy .NET jest dostępna w NuGet. Biblioteka rozszerza klasy CloudJob i CloudTask przy użyciu nowych metod. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją biblioteki konwencji plików.

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

Następne kroki