Taakvoorbereidings- en releasetaken op Batch-rekenknooppunten

Een Azure Batch taak moet vaak worden ingesteld voordat de taken worden uitgevoerd en onderhoud na de taak wanneer de taken zijn voltooid. U moet bijvoorbeeld algemene taakinvoergegevens downloaden naar uw rekenknooppunten of taakuitvoergegevens uploaden naar Azure Storage nadat de taak is voltooid. U kunt jobvoorbereidings - en jobreleasetaken gebruiken voor deze bewerkingen.

  • Een taak voor het voorbereiden van een taak wordt uitgevoerd vóór de taken van een taak, op alle rekenknooppunten die zijn gepland om ten minste één taak uit te voeren.
  • Een taak voor het vrijgeven van een taak wordt uitgevoerd zodra de taak is voltooid, op elk knooppunt in de pool waarop een taakvoorbereidingstaak is uitgevoerd.

Net als bij andere Batch-taken kunt u een opdrachtregel opgeven die moet worden aangeroepen wanneer een jobvoorbereidings- of releasetaak wordt uitgevoerd. Jobvoorbereidings- en releasetaken bieden vertrouwde Batch-taakfuncties, zoals:

  • Resourcebestand downloaden.
  • Uitvoering met verhoogde bevoegdheid.
  • Aangepaste omgevingsvariabelen.
  • Maximale uitvoeringsduur.
  • Aantal nieuwe pogingen.
  • Bewaartijd van bestand.

In dit artikel wordt beschreven hoe u de klassen JobPreparationTask en JobReleaseTask gebruikt in de Batch .NET-bibliotheek .

Tip

Taakvoorbereidings- en releasetaken zijn met name handig in omgevingen met gedeelde pools, waarin een pool van rekenknooppunten tussen taakuitvoeringen blijft bestaan en door veel taken wordt gebruikt.

Gebruiksvoorbeelden voor taakvoorbereidings- en releasetaken

Jobvoorbereidings- en jobreleasetaken zijn geschikt voor de volgende scenario's:

  • Algemene taakgegevens downloaden. Batchtaken vereisen vaak een gemeenschappelijke set gegevens als invoer voor taken van een taak. U kunt een taakvoorbereidingstaak gebruiken om deze gegevens naar elk knooppunt te downloaden voordat de andere taken van de taak worden uitgevoerd.

    In dagelijkse risicoanalyseberekeningen zijn marktgegevens bijvoorbeeld taakspecifiek, maar gemeenschappelijk voor alle taken in de taak. U kunt een taak voor het voorbereiden van een taak gebruiken om deze marktgegevens, die vaak meerdere gigabytes groot zijn, te downloaden naar elk rekenknooppunt, zodat elke taak die op het knooppunt wordt uitgevoerd, deze kan gebruiken.

  • Taak en taakuitvoer verwijderen. In een omgeving met een gedeelde pool, waar de rekenknooppunten van een pool tussen taken niet buiten gebruik worden gesteld, moet u mogelijk taakgegevens tussen uitvoeringen verwijderen. Mogelijk moet u bijvoorbeeld schijfruimte besparen op de knooppunten of voldoen aan het beveiligingsbeleid van uw organisatie. U kunt een jobreleasetaak gebruiken om gegevens te verwijderen die door een taakvoorbereidingstaak zijn gedownload of die door de taakuitvoering zijn gegenereerd.

  • Logboeken bewaren. Mogelijk wilt u een kopie bewaren van logboekbestanden die door uw taken worden gegenereerd, of crashdumpbestanden die door mislukte toepassingen worden gegenereerd. U kunt een jobreleasetaak gebruiken om deze gegevens te comprimeren en te uploaden naar een Azure Storage-account.

Jobvoorbereidingstaak

Voordat taaktaken worden uitgevoerd, voert Batch de taak voor taakvoorbereiding uit op elk rekenknooppunt dat is gepland om een taak uit te voeren. Standaard wacht Batch tot de taakvoorbereidingstaak is voltooid voordat geplande taaktaken worden uitgevoerd, maar u kunt deze configureren om niet te wachten.

Als het knooppunt opnieuw wordt opgestart, wordt de taak voor het voorbereiden van de taak opnieuw uitgevoerd, maar u kunt dit gedrag ook uitschakelen. Als u een taak hebt met een jobvoorbereidingstaak en een taak voor taakbeheer, wordt de taak voor het voorbereiden van de taak uitgevoerd vóór de taak van de jobmanager en vóór alle andere taken. De taak voor het voorbereiden van de taak wordt altijd eerst uitgevoerd.

De taak voor het voorbereiden van de taak wordt alleen uitgevoerd op knooppunten die zijn gepland om een taak uit te voeren. Dit gedrag voorkomt onnodige uitvoeringen op knooppunten waaraan geen taken zijn toegewezen. Knooppunten krijgen mogelijk geen taken toegewezen wanneer het aantal taaktaken kleiner is dan het aantal knooppunten in de pool. Dit gedrag is ook van toepassing wanneer gelijktijdige taakuitvoering is ingeschakeld, waardoor sommige knooppunten inactief blijven als het aantal taken lager is dan het totaal aantal mogelijke gelijktijdige taken.

Notitie

JobPreparationTask verschilt van CloudPool.StartTask in dat JobPreparationTask wordt uitgevoerd aan het begin van elke taak, terwijl StartTask deze alleen wordt uitgevoerd wanneer een rekenknooppunt voor het eerst lid wordt van een pool of opnieuw wordt opgestart.

Taak voor het vrijgeven van taken

Nadat u een taak als voltooid hebt gemarkeerd, wordt de taak voor het vrijgeven van de taak uitgevoerd op elk knooppunt in de pool waarop een taakvoorbereidingstaak is uitgevoerd. U markeert een taak als voltooid door een beëindigingsaanvraag uit te voeren. Met deze aanvraag wordt de taakstatus ingesteld op beëindigen, worden alle actieve of actieve taken beëindigd die aan de taak zijn gekoppeld en wordt de taak voor het vrijgeven van de taak uitgevoerd. De taak wordt vervolgens verplaatst naar de voltooide status.

Notitie

Als u een taak verwijdert, wordt ook de taak voor het vrijgeven van de taak uitgevoerd. Als een taak echter al is beëindigd, wordt de releasetaak geen tweede keer uitgevoerd als de taak later wordt verwijderd.

Taakreleasetaken kunnen maximaal 15 minuten worden uitgevoerd voordat de Batch-service ze beëindigt. Zie de rest API-referentiedocumentatie voor meer informatie.

Taken voor het voorbereiden en vrijgeven van taken met Batch .NET

Als u een jobvoorbereidingstaak wilt uitvoeren, wijst u een JobPreparationTask-object toe aan de eigenschap CloudJob.JobPreparationTask van uw taak. Als u een jobreleasetaak wilt gebruiken, initialiseert u een JobReleaseTask en wijst u deze toe aan de CloudJob.JobReleaseTask van uw taak.

In het volgende codefragment myBatchClient is een exemplaar van BatchClient en myPool een bestaande pool binnen het Batch-account.

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

De taak voor het vrijgeven van de taak wordt uitgevoerd wanneer een taak wordt beëindigd of verwijderd. U beëindigt een taak met behulp van JobOperations.TerminateJobAsync en verwijdert een taak met behulp van JobOperations.DeleteJobAsync. Normaal gesproken beëindigt of verwijdert u een taak wanneer de taken zijn voltooid of wanneer een door u gedefinieerde time-out is bereikt.

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

Codevoorbeeld op GitHub

Als u taakvoorbereidings- en releasetaken in actie wilt zien, bouwt en voert u het voorbeeldproject JobPrepRelease uit vanuit GitHub. Deze consoletoepassing voert de volgende acties uit:

  1. Hiermee maakt u een pool met twee knooppunten.
  2. Hiermee maakt u een taak met jobvoorbereidings-, release- en standaardtaken.
  3. Hiermee wordt de taak voor het voorbereiden van de taak uitgevoerd, waarmee eerst de knooppunt-id naar een tekstbestand in de gedeelde map van een knooppunt wordt geschreven.
  4. Hiermee wordt een taak uitgevoerd op elk knooppunt dat de taak-id naar hetzelfde tekstbestand schrijft.
  5. Zodra alle taken zijn voltooid of de time-out is bereikt, wordt de inhoud van het tekstbestand van elk knooppunt naar de console afgedrukt.
  6. Hiermee wordt de taak voor het vrijgeven van de taak uitgevoerd om het bestand van het knooppunt te verwijderen wanneer de taak is voltooid.
  7. Hiermee worden de afsluitcodes van de taakvoorbereidings- en releasetaken afgedrukt voor elk knooppunt waarop ze zijn uitgevoerd.
  8. Onderbreekt de uitvoering om bevestiging van taak- en/of poolverwijdering toe te staan.

De uitvoer van de voorbeeldtoepassing is vergelijkbaar met het volgende voorbeeld:

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...

Notitie

De verschillende aanmaak- en begintijden van knooppunten in een nieuwe pool betekent dat sommige knooppunten klaar zijn voor taken vóór andere, zodat u mogelijk andere uitvoer ziet. Omdat de taken snel zijn voltooid, kan een van de knooppunten van de pool alle taken van de taak uitvoeren. Als dit gebeurt, bestaan de taakvoorbereidings- en releasetaken niet voor het knooppunt waarop geen taken zijn uitgevoerd.

Taakvoorbereidings- en releasetaken weergeven in de Azure Portal

U kunt de Azure Portal gebruiken om eigenschappen en taken van Batch-taken weer te geven, inclusief taakvoorbereidings- en releasetaken. Selecteer taken in de linkernavigatiebalk van uw Batch-account en selecteer vervolgens een taak. Als u de voorbeeldtoepassing uitvoert, gaat u naar de taakpagina nadat de taken zijn voltooid, maar voordat u de taak en pool verwijdert.

U kunt de voortgang en status van taken bewaken door Het aantal geschatte taken uit te vouwen op de pagina Taakoverzicht of Taken .

Schermopname van taakvoortgang in de Azure Portal.

In de volgende schermopname ziet u de pagina JobPrepReleaseSampleJob nadat de voorbeeldtoepassing is uitgevoerd. Deze taak had voorbereidings- en releasetaken, dus u kunt Voorbereidingstaken of Taken vrijgeven selecteren in het linkernavigatievenster om de eigenschappen ervan te bekijken.

Schermopname van de eigenschappen van de taakrelease in de Azure Portal.

Volgende stappen