Jobbförberedelse- och versionsaktiviteter på Batch-beräkningsnoder

Ett Azure Batch jobb kräver ofta konfiguration innan dess uppgifter körs och underhåll efter jobbet när dess uppgifter har slutförts. Du kan till exempel behöva ladda ned vanliga uppgiftsindata till dina beräkningsnoder eller ladda upp aktivitetsutdata till Azure Storage när jobbet har slutförts. Du kan använda jobbförberedelser och jobbpubliceringsuppgifter för dessa åtgärder.

  • En jobbförberedelseaktivitet körs före ett jobbs aktiviteter, på alla beräkningsnoder som är schemalagda att köra minst en aktivitet.
  • En jobbversionsaktivitet körs när jobbet har slutförts, på varje nod i poolen som körde en jobbförberedelseaktivitet.

Precis som med andra Batch-uppgifter kan du ange en kommandorad som ska anropas när en jobbförberedelse eller versionsaktivitet körs. Jobbförberedelse- och versionsaktiviteter erbjuder välbekanta Batch-uppgiftsfunktioner som:

  • Nedladdning av resursfil.
  • Förhöjd körning.
  • Anpassade miljövariabler.
  • Maximal körningstid.
  • Antal återförsök.
  • Filkvarhållningstid.

Den här artikeln visar hur du använder klasserna JobPreparationTask och JobReleaseTask i Batch .NET-biblioteket .

Tips

Jobbförberedelse- och versionsaktiviteter är särskilt användbara i miljöer med delade pooler , där en pool med beräkningsnoder bevaras mellan jobbkörningar och används av många jobb.

Användningsfall för jobbförberedelser och lanseringsuppgifter

Jobbförberedelser och jobbpubliceringsuppgifter passar bra för följande scenarier:

  • Ladda ned vanliga uppgiftsdata. Batch-jobb kräver ofta en gemensam uppsättning data som indata för ett jobbs uppgifter. Du kan använda en jobbförberedelseaktivitet för att ladda ned dessa data till varje nod innan jobbets andra aktiviteter körs.

    I dagliga riskanalysberäkningar är marknadsdata till exempel jobbspecifika men gemensamma för alla uppgifter i jobbet. Du kan använda en jobbförberedelseaktivitet för att ladda ned marknadsdata, som ofta är flera gigabyte i storlek, till varje beräkningsnod så att alla aktiviteter som körs på noden kan använda dem.

  • Ta bort jobb- och aktivitetsutdata. I en delad poolmiljö, där en pools beräkningsnoder inte inaktiveras mellan jobb, kan du behöva ta bort jobbdata mellan körningar. Du kan till exempel behöva spara diskutrymme på noderna eller uppfylla organisationens säkerhetsprinciper. Du kan använda en jobbpubliceringsaktivitet för att ta bort data som en jobbförberedelseaktivitet har laddat ned eller som aktivitetskörningen genererade.

  • Behåll loggar. Du kanske vill behålla en kopia av loggfilerna som dina uppgifter genererar eller kraschdumpfiler som misslyckade program genererar. Du kan använda en jobbpubliceringsaktivitet för att komprimera och ladda upp dessa data till ett Azure Storage-konto.

Jobbförberedelseaktivitet

Innan den kör jobbaktiviteter kör Batch jobbförberedelseaktiviteten på varje beräkningsnod som är schemalagd att köra en aktivitet. Som standard väntar Batch på att jobbförberedelseaktiviteten ska slutföras innan du kör schemalagda jobbaktiviteter, men du kan konfigurera den att inte vänta.

Om noden startas om körs jobbförberedelseaktiviteten igen, men du kan också inaktivera det här beteendet. Om du har ett jobb med en jobbförberedelseaktivitet och en jobbhanteraraktivitet körs jobbförberedelseaktiviteten före jobbhanteraraktiviteten och före alla andra aktiviteter. Jobbförberedelseaktiviteten körs alltid först.

Jobbförberedelseaktiviteten körs endast på noder som är schemalagda att köra en aktivitet. Det här beteendet förhindrar onödiga körningar på noder som inte har tilldelats några uppgifter. Noder kanske inte tilldelas några aktiviteter när antalet jobbaktiviteter är mindre än antalet noder i poolen. Det här beteendet gäller även när samtidig aktivitetskörning är aktiverad, vilket gör att vissa noder blir inaktiva om antalet aktiviteter är lägre än det totala antalet samtidiga aktiviteter.

Anteckning

JobPreparationTask skiljer sig från CloudPool.StartTask i som JobPreparationTask körs i början av varje jobb, medan StartTask körs endast när en beräkningsnod först ansluter till en pool eller startar om.

Jobbfrisläppningsaktivitet

När du markerar ett jobb som slutfört körs jobblanseringsaktiviteten på varje nod i poolen som körde en jobbförberedelseaktivitet. Du markerar ett jobb som slutfört genom att utfärda en avslutningsbegäran. Den här begäran anger jobbtillståndet till att avsluta, avsluta aktiva eller aktiva aktiviteter som är associerade med jobbet och kör jobbpubliceringsaktiviteten. Jobbet flyttas sedan till det slutförda tillståndet.

Anteckning

Om du tar bort ett jobb körs även jobbpubliceringsaktiviteten. Men om ett jobb redan har avslutats körs inte versionsaktiviteten en andra gång om jobbet tas bort senare.

Jobbpubliceringsuppgifter kan köras i högst 15 minuter innan Batch-tjänsten avslutar dem. Mer information finns i REST API-referensdokumentationen.

Jobbförberedelse- och versionsaktiviteter med Batch .NET

Om du vill köra en jobbförberedelseaktivitet tilldelar du ett JobPreparationTask-objekt till jobbets cloudjob.jobpreparationTask-egenskap . Om du vill använda en jobbversionsaktivitet initierar du en JobReleaseTask och tilldelar den till jobbets CloudJob.JobReleaseTask.

I följande kodfragment myBatchClient är en instans av BatchClient och myPool är en befintlig pool i Batch-kontot.

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

Jobbpubliceringsaktiviteten körs när ett jobb avslutas eller tas bort. Du avslutar ett jobb med hjälp av JobOperations.TerminateJobAsync och tar bort ett jobb med hjälp av JobOperations.DeleteJobAsync. Du avslutar eller tar vanligtvis bort ett jobb när dess uppgifter har slutförts eller när en tidsgräns som du definierar nås.

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

Kodexempel på GitHub

Om du vill se jobbförberedelse- och versionsaktiviteter i praktiken skapar och kör du exempelprojektet JobPrepRelease från GitHub. Det här konsolprogrammet vidtar följande åtgärder:

  1. Skapar en pool med två noder.
  2. Skapar ett jobb med jobbförberedelse, lansering och standarduppgifter.
  3. Kör jobbförberedelseaktiviteten, som först skriver nod-ID:t till en textfil i en nods delade katalog.
  4. Kör en aktivitet på varje nod som skriver sitt aktivitets-ID till samma textfil.
  5. När alla aktiviteter har slutförts eller tidsgränsen nås skriver innehållet i varje nods textfil ut till konsolen.
  6. Kör jobbpubliceringsaktiviteten för att ta bort filen från noden när jobbet har slutförts.
  7. Skriver ut slutkoderna för jobbförberedelse- och versionsaktiviteterna för varje nod som de kördes på.
  8. Pausar körningen för att tillåta bekräftelse av borttagning av jobb och/eller pool.

Utdata från exempelprogrammet liknar följande exempel:

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

Anteckning

De varierande skapande- och starttiderna för noder i en ny pool innebär att vissa noder är redo för aktiviteter före andra, så du kan se olika utdata. Eftersom aktiviteterna slutförs snabbt kan en av poolens noder köra alla jobbuppgifter. Om detta inträffar finns inte jobbförberedelse- och versionsaktiviteterna för noden som inte körde några aktiviteter.

Visa jobbförberedelse- och versionsaktiviteter i Azure Portal

Du kan använda Azure Portal för att visa egenskaper och uppgifter för Batch-jobb, inklusive jobbförberedelser och versionsaktiviteter. På sidan Batch-konto väljer du Jobb i det vänstra navigeringsfältet och väljer sedan ett jobb. Om du kör exempelprogrammet navigerar du till jobbsidan när aktiviteterna har slutförts, men innan du tar bort jobbet och poolen.

Du kan övervaka jobbförlopp och status genom att expandera Ungefärligt antal aktiviteter på sidan Översikt över jobb eller Aktiviteter .

Skärmbild som visar jobbaktivitetens förlopp i Azure Portal.

Följande skärmbild visar sidan JobPrepReleaseSampleJob när exempelprogrammet har körts. Det här jobbet hade förberedelse- och versionsaktiviteter, så du kan välja Förberedelseaktiviteter eller Släpp uppgifter i det vänstra navigeringsfönstret för att se deras egenskaper.

Skärmbild som visar egenskaper för jobblanseringsaktivitet i Azure Portal.

Nästa steg