Zadania przygotowywania i wydawania zadań w węzłach obliczeniowych usługi Batch

Zadanie Azure Batch często wymaga konfiguracji przed wykonaniem zadań i konserwacji po zakończeniu zadań. Na przykład może być konieczne pobranie typowych danych wejściowych zadania do węzłów obliczeniowych lub przekazanie danych wyjściowych zadania do usługi Azure Storage po zakończeniu zadania. Dla tych operacji można użyć zadań przygotowywania iwydawania zadań .

  • Zadanie przygotowania zadania jest uruchamiane przed zadaniami zadania na wszystkich węzłach obliczeniowych zaplanowanych do uruchomienia co najmniej jednego zadania.
  • Zadanie wydania zadania jest uruchamiane po zakończeniu zadania w każdym węźle w puli, w ramach którego uruchomiono zadanie przygotowania zadania.

Podobnie jak w przypadku innych zadań usługi Batch, można określić wiersz polecenia, który ma być wywoływany, gdy zadanie przygotowania zadania lub wydania zostanie uruchomione. Zadania przygotowywania i wydawania zadań oferują znane funkcje zadań usługi Batch, takie jak:

  • Pobieranie pliku zasobu.
  • Wykonywanie z podwyższonym poziomem uprawnień.
  • Niestandardowe zmienne środowiskowe.
  • Maksymalny czas trwania wykonywania.
  • Liczba ponownych prób.
  • Czas przechowywania plików.

W tym artykule pokazano, jak używać klas JobPreparationTask i JobReleaseTask w bibliotece platformy .NET usługi Batch .

Porada

Zadania przygotowania i wydania zadań są szczególnie przydatne w środowiskach puli udostępnionej , w których pula węzłów obliczeniowych utrzymuje się między uruchomieniami zadań i jest używana przez wiele zadań.

Przypadki użycia zadań przygotowywania i wydawania zadań

Zadania przygotowania zadania i wydawania zadań są odpowiednie dla następujących scenariuszy:

  • Pobierz typowe dane zadań. Zadania wsadowe często wymagają wspólnego zestawu danych jako danych wejściowych dla zadań zadania zadania. Za pomocą zadania przygotowania zadania można pobrać te dane do każdego węzła przed wykonaniem innych zadań zadania.

    Na przykład w obliczeniach analizy ryzyka dziennego dane rynkowe są specyficzne dla zadania, ale typowe dla wszystkich zadań w zadaniu. Możesz użyć zadania przygotowania zadania, aby pobrać te dane rynkowe, które często mają kilka gigabajtów rozmiaru, do każdego węzła obliczeniowego, aby każde zadanie uruchomione w węźle może z niego korzystać.

  • Usuń dane wyjściowe zadania i zadania. W środowisku puli udostępnionej, w którym węzły obliczeniowe puli nie są likwidowane między zadaniami, może być konieczne usunięcie danych zadania między przebiegami. Na przykład może być konieczne oszczędzanie miejsca na dysku w węzłach lub spełnienie zasad zabezpieczeń organizacji. Za pomocą zadania zwolnienia zadania można usunąć dane pobrane przez zadanie przygotowania zadania lub wygenerowane przez to zadanie podrzędne.

  • Zachowaj dzienniki. Możesz zachować kopię plików dziennika generowanych przez zadania lub pliki zrzutu awaryjnego, które nie powiodły się w aplikacjach. Za pomocą zadania wydania zadania można skompresować i przekazać te dane na konto usługi Azure Storage.

Zadanie przygotowania zadania

Przed uruchomieniem zadań podrzędnych usługa Batch uruchamia zadanie przygotowania zadań w każdym węźle obliczeniowym zaplanowanym do uruchomienia zadania. Domyślnie usługa Batch czeka na ukończenie zadania przygotowania zadania przed uruchomieniem zaplanowanych zadań, ale można ją skonfigurować, aby nie czekać.

Jeśli węzeł zostanie ponownie uruchomiony, zadanie przygotowania zadania zostanie uruchomione ponownie, ale można również wyłączyć to zachowanie. Jeśli masz zadanie z zadaniem przygotowania zadania i menedżerem zadań, zadanie przygotowania zadania jest uruchamiane przed zadaniem menedżera zadań i przed wszystkimi innymi zadaniami. Zadanie przygotowania zadania zawsze jest uruchamiane jako pierwsze.

Zadanie przygotowania zadania jest uruchamiane tylko w węzłach zaplanowanych do uruchomienia zadania. To zachowanie zapobiega niepotrzebnym uruchomieniom w węzłach, które nie są przypisane żadne zadania. Węzły mogą nie być przypisane do żadnych zadań, gdy liczba zadań podrzędnych jest mniejsza niż liczba węzłów w puli. To zachowanie ma zastosowanie również w przypadku włączenia współbieżnego wykonywania zadań , co pozostawia niektóre węzły bezczynne, jeśli liczba zadań jest niższa niż łączna liczba możliwych współbieżnych zadań.

Uwaga

Funkcja JobPreparationTask różni się od klasy CloudPool.StartTask , która JobPreparationTask jest uruchamiana na początku każdego zadania, podczas gdy StartTask węzeł obliczeniowy najpierw dołącza do puli lub uruchamia się ponownie.

Zadanie wydania zadania

Po oznaczeniu zadania jako ukończonego zadanie wydania zadania jest uruchamiane w każdym węźle w puli, w której uruchomiono zadanie przygotowania zadania. Oznaczasz zadanie jako ukończone, wysyłając żądanie zakończenia. To żądanie ustawia stan zadania na zakończenie, kończy wszystkie aktywne lub uruchomione zadania skojarzone z zadaniem i uruchamia zadanie wydania zadania. Zadanie następnie przechodzi do stanu ukończonego .

Uwaga

Usunięcie zadania powoduje również wykonanie zadania wydania zadania. Jeśli jednak zadanie zostało już zakończone, zadanie wydania nie zostanie uruchomione po raz drugi, jeśli zadanie zostanie później usunięte.

Zadania wydania zadania mogą być uruchamiane przez maksymalnie 15 minut, zanim usługa Batch je zakończy. Aby uzyskać więcej informacji, zobacz dokumentację interfejsu API REST.

Zadania przygotowywania i wydawania zadań przy użyciu platformy .NET usługi Batch

Aby uruchomić zadanie przygotowania zadania, przypisz obiekt JobPreparationTask do właściwości CloudJob.JobPreparationTask zadania. Podobnie, aby użyć zadania wydania zadania, zainicjuj zadanie JobReleaseTask i przypisz je do zadania CloudJob.JobReleaseTask.

W poniższym fragmencie myBatchClient kodu jest wystąpieniem klasy BatchClient i myPool jest istniejącą pulą na koncie usługi Batch.

// Create the CloudJob for CloudPool "myPool"
CloudJob myJob =
    myBatchClient.JobOperations.CreateJob(
        "JobPrepReleaseSampleJob",
        new PoolInformation() { PoolId = "myPool" });

// Specify the command lines for the job preparation and release tasks
string jobPrepCmdLine =
    "cmd /c echo %AZ_BATCH_NODE_ID% > %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";
string jobReleaseCmdLine =
    "cmd /c del %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";

// Assign the job preparation task to the job
myJob.JobPreparationTask =
    new JobPreparationTask { CommandLine = jobPrepCmdLine };

// Assign the job release task to the job
myJob.JobReleaseTask =
    new JobReleaseTask { CommandLine = jobReleaseCmdLine };

await myJob.CommitAsync();

Zadanie wydania zadania jest uruchamiane po zakończeniu lub usunięciu zadania. Zadanie kończy się za pomocą polecenia JobOperations.TerminateJobAsync i usuwa zadanie przy użyciu polecenia JobOperations.DeleteJobAsync. Zwykle kończysz lub usuwasz zadanie po zakończeniu jego zadań lub po osiągnięciu limitu czasu zdefiniowanego limitu czasu.

// Terminate the job to mark it as completed. Terminate initiates the
// job release task on any node that ran job tasks. Note that the
// job release task also runs when a job is deleted, so you don't
// have to call Terminate if you delete jobs after task completion.

await myBatchClient.JobOperations.TerminateJobAsync("JobPrepReleaseSampleJob");

Przykład kodu w witrynie GitHub

Aby wyświetlić zadania przygotowania i wydania zadań w działaniu, skompiluj i uruchom przykładowy projekt JobPrepRelease z usługi GitHub. Ta aplikacja konsolowa wykonuje następujące akcje:

  1. Tworzy pulę z dwoma węzłami.
  2. Tworzy zadanie z zadaniami przygotowania, wydania i standardowych zadań.
  3. Uruchamia zadanie przygotowania zadania, które najpierw zapisuje identyfikator węzła do pliku tekstowego w katalogu udostępnionym węzła.
  4. Uruchamia zadanie w każdym węźle, który zapisuje identyfikator zadania do tego samego pliku tekstowego.
  5. Po zakończeniu wszystkich zadań lub osiągnięciu limitu czasu do konsoli wyświetla zawartość pliku tekstowego każdego węzła.
  6. Uruchamia zadanie wydania zadania, aby usunąć plik z węzła po zakończeniu zadania.
  7. Drukuje kody zakończenia zadań przygotowywania i wydawania zadań dla każdego uruchomionego węzła.
  8. Wstrzymuje wykonywanie, aby umożliwić potwierdzenie usunięcia zadania i/lub puli.

Dane wyjściowe z przykładowej aplikacji są podobne do następującego przykładu:

Attempting to create pool: JobPrepReleaseSamplePool
Created pool JobPrepReleaseSamplePool with 2 nodes
Checking for existing job JobPrepReleaseSampleJob...
Job JobPrepReleaseSampleJob not found, creating...
Submitting tasks and awaiting completion...
All tasks completed.

Contents of shared\job_prep_and_release.txt on tvm-2434664350_1-20160623t173951z:
-------------------------------------------
tvm-2434664350_1-20160623t173951z tasks:
  task001
  task004
  task005
  task006

Contents of shared\job_prep_and_release.txt on tvm-2434664350_2-20160623t173951z:
-------------------------------------------
tvm-2434664350_2-20160623t173951z tasks:
  task008
  task002
  task003
  task007

Waiting for job JobPrepReleaseSampleJob to reach state Completed
...

tvm-2434664350_1-20160623t173951z:
  Prep task exit code:    0
  Release task exit code: 0

tvm-2434664350_2-20160623t173951z:
  Prep task exit code:    0
  Release task exit code: 0

Delete job? [yes] no
yes
Delete pool? [yes] no
yes

Sample complete, hit ENTER to exit...

Uwaga

Różne czasy tworzenia i uruchamiania węzłów w nowej puli oznaczają, że niektóre węzły są gotowe do wykonywania zadań przed innymi, dzięki czemu mogą zostać wyświetlone różne dane wyjściowe. W szczególności, ponieważ zadania są wykonywane szybko, jeden z węzłów puli może uruchamiać wszystkie zadania zadania. W takim przypadku zadania przygotowania i wydania nie istnieją dla węzła, który nie uruchamiał żadnych zadań.

Wyświetlanie zadań przygotowywania i wydawania zadań w Azure Portal

Za pomocą Azure Portal można wyświetlić właściwości i zadania podrzędne zadania usługi Batch, w tym zadania przygotowania zadania i wydania. Na stronie konta usługi Batch wybierz pozycję Zadania w obszarze nawigacji po lewej stronie, a następnie wybierz zadanie. Jeśli uruchomisz przykładową aplikację, przejdź do strony zadania po zakończeniu zadań, ale przed usunięciem zadania i puli.

Postęp i stan zadania można monitorować, rozwijając przybliżoną liczbę zadań na stronie Przegląd zadania lub Zadania .

Zrzut ekranu przedstawiający postęp zadania zadania w Azure Portal.

Poniższy zrzut ekranu przedstawia stronę JobPrepReleaseSampleJob po uruchomieniu przykładowej aplikacji. To zadanie miało zadania przygotowania i wydania, dzięki czemu można wybrać pozycję Zadania przygotowania lub Zadania wydania w obszarze nawigacji po lewej stronie, aby wyświetlić ich właściwości.

Zrzut ekranu przedstawiający właściwości zadania wydania zadania w Azure Portal.

Następne kroki