Dela via


Jobb och uppgifter i Azure Batch

I Azure Batch representerar en uppgift en beräkningsenhet. Ett jobb är en samling av dessa uppgifter. Mer information om jobb och uppgifter samt hur de används i ett Azure Batch-arbetsflöde beskrivs nedan.

Projekt

Ett jobb är en samling aktiviteter. Det hanterar hur beräkningen utförs av dess aktiviteter på beräkningsnoderna i en pool.

Ett jobb anger den pool där arbetet ska köras. Du kan skapa en ny pool för varje jobb eller använda en pool för många jobb. Du kan skapa en pool för varje jobb som är associerat med ett jobbschema eller en pool för alla jobb som är associerade med ett jobbschema.

Jobbprioritet

Du kan tilldela en valfri jobbprioritet till jobb som du skapar. Batch-tjänsten använder jobbets prioritetsvärde för att fastställa schemaläggningsordningen (för alla aktiviteter i jobbet) i varje pool.

Om du vill uppdatera prioriteten för ett jobb anropar du Uppdatera egenskaperna för en jobbåtgärd (Batch REST) eller ändrar CloudJob.Priority (Batch .NET). Prioritetsvärden sträcker sig från -1 000 (lägsta prioritet) till +1 000 (högsta prioritet).

I samma pool har jobb med högre prioritet schemaläggningsprioritet framför jobb med lägre prioritet. Uppgifter i jobb med lägre prioritet som redan körs kommer inte att föregripas av aktiviteter i ett jobb med högre prioritet. Jobb med samma prioritetsnivå har lika stor chans att schemaläggas och ordningen på aktivitetskörningen har inte definierats.

Ett jobb med ett högt prioritetsvärde som körs i en pool påverkar inte schemaläggningen av jobb som körs i en separat pool eller i ett annat Batch-konto. Jobbprioritet gäller inte för automatiska pooler som skapas när jobbet skickas.

Jobbbegränsningar

Du kan använda jobbegränsningar för att ange vissa begränsningar för dina jobb:

  • Du kan ställa in en högsta wall-clock-tid så att ett jobb och alla dess aktiviteter avslutas om jobbet körs under längre tid än den angivna wall-clock-tiden.
  • Du kan ange det maximala antalet återförsök som en begränsning, inklusive om en aktivitet alltid görs om eller aldrig görs om. Om du försöker igen innebär det att om aktiviteten misslyckas kommer den att köras igen.

Jobbhanterarens uppgifter och automatisk avslutning

Klientprogrammet kan lägga till aktiviteter till ett jobb eller så kan du ange en Job Manager-aktivitet. En Job Manager-aktivitet innehåller den information som krävs för att skapa de nödvändiga aktiviteterna för ett jobb, där Job Manager-aktiviteten körs på en av beräkningsnoderna i poolen. Jobbhanteraraktiviteten hanteras specifikt av Batch. det placeras i kö så snart jobbet har skapats och startas om om det misslyckas. En jobbhanteraraktivitet krävs för jobb som skapas av ett jobbschema, eftersom det är det enda sättet att definiera aktiviteterna innan jobbet instansieras.

Som standard är jobben fortfarande i aktivt läge när alla aktiviteter i jobbet har slutförts. Du kan ändra det här beteendet så att jobbet avbryts automatiskt när alla aktiviteter i jobbet har slutförts. Ange jobbets onAllTasksComplete-egenskap (OnAllTasksComplete i Batch .NET) till terminatejob*" för att automatiskt avsluta jobbet när alla dess aktiviteter är i slutfört tillstånd.

Batch-tjänsten anser att ett jobb utan aktiviteter har slutfört alla sina uppgifter. Därför används det här alternativet oftast med en Job Manager-aktivitet. Om du vill använda automatisk uppsägning av jobb utan en jobbhanterare bör du först ange ett nytt jobbs onAllTasksComplete-egenskap till noactionoch sedan ange den till terminatejob*' först när du har lagt till aktiviteter i jobbet.

Schemalagda jobb

Med jobbscheman kan du skapa återkommande jobb i Batch-tjänsten. Ett jobbschema anger när jobb ska köras och innehåller specifikationerna för jobben som ska köras. Du kan ange varaktigheten för schemat (hur länge och när schemat gäller) och hur ofta jobb skapas under den schemalagda perioden.

Uppgifter

En aktivitet är en beräkningsenhet som associeras med ett jobb. Den körs på en nod. Aktiviteter tilldelas till en nod för körning eller placeras i kö tills en nod blir ledig. Enkelt beskrivet kör en aktivitet ett eller flera program eller skript på en beräkningsnod för att utföra det arbete som du vill ha gjort.

När du skapar en aktivitet kan du ange:

  • Uppgiftens kommandoraden. Det här är kommandoraden som kör ditt program eller skript på beräkningsnoden.

    Observera att kommandoraden inte körs under ett gränssnitt. Därför har den inte inbyggt stöd för shell-funktioner som tillägg i miljövariabler (till exempel PATH). Om du vill dra nytta av sådana funktioner måste du anropa gränssnittet på kommandoraden, till exempel genom att starta cmd.exe på Windows-noder eller /bin/sh i Linux:

    cmd /c MyTaskApplication.exe %MY_ENV_VAR%

    /bin/sh -c MyTaskApplication $MY_ENV_VAR

    Om dina aktiviteter måste köra ett program eller skript som inte finns i nodens PATH eller referensmiljövariabler anropar du gränssnittet uttryckligen på aktivitetens kommandorad.

  • Resursfiler som innehåller de data som ska bearbetas. Dessa filer kopieras automatiskt till noden från Blob Storage i ett Azure Storage-konto innan aktivitetens kommandorad körs. Mer information finns i Starta uppgift och Filer och kataloger.

  • Miljövariablerna som krävs av programmet. Mer information finns i Miljöinställningar för aktiviteter.

  • Begränsningarna som aktiviteten ska köras under. Begränsningarna omfattar t.ex. den längsta tid som aktiviteten kan köras, det högsta antal omförsök som ska göras för en aktivitet som misslyckats, samt den längsta tid som filer i aktivitetens arbetskatalog ska bevaras.

  • Programpaket för distribution till beräkningsnoden som aktiviteten har schemalagts att köra på. Med programpaket blir det lättare att distribuera och hantera versionerna av de program som dina aktiviteter kör. Programpaket på aktivitetsnivå är särskilt användbara i miljöer med delade pooler där olika jobb körs i en pool och där poolen inte tas bort när ett jobb har slutförts. Om jobbet har färre aktiviteter än noder i poolen kan programpaket för aktiviteter minimera dataöverföringen eftersom ditt program bara distribueras till noderna som kör aktiviteterna.

  • En containeravbildning refererar till Docker Hub eller ett privat register och andra inställningar som behövs för att skapa en Docker-container där uppgifter kan köras på noden. Den här informationen behöver du bara ange om poolen har skapats med en containerkonfiguration.

Kommentar

Maximal livstid för en uppgift, från den tidpunkt då den läggs till i jobbet tills den slutförs, är 180 dagar. Slutförda uppgifter bevaras i 7 dagar. Data för uppgifter som inte slutförts inom den maximala livstiden är inte tillgängliga.

Förutom uppgifter som du definierar för att utföra beräkningen på en nod tillhandahålls även flera särskilda uppgifter av Batch-tjänsten:

Startaktivitet

Genom att associera en startaktivitet med en pool kan du förbereda driftsmiljön för dess noder. Du kan t.ex. installera de program som dina aktiviteter ska köra eller starta bakgrundsprocesser. Startaktiviteten körs varje gång en nod startas, så länge den finns kvar i poolen. Detta inkluderar när noden först läggs till i poolen och när den startas om eller omskapas.

En viktig fördel med startaktiviteten är att den kan innehålla all information som krävs för att konfigurera en beräkningsnod och installera de program som krävs för att köra aktiviteterna. Att öka antalet noder i en pool är därför lika enkelt som att ange antalet nya målnoder. Startaktiviteten innehåller den information som krävs för att Batch-tjänsten ska kunna konfigurera de nya noderna och förbereda dem för att acceptera uppgifter.

Precis som med alla Azure Batch-uppgifter kan du ange en lista över resursfiler i Azure Storage, förutom en kommandorad som ska köras. Batchtjänsten kopierar först resursfilerna till noden från Azure Storage och kör sedan kommandoraden. När det gäller en pools startaktivitet innehåller fillistan vanligtvis aktivitetens program och dess beroenden.

Startuppgiften kan dock även innehålla referensdata som ska användas av alla aktiviteter som körs på beräkningsnoden. En startaktivitets kommandorad kan exempelvis köra en robocopy-åtgärd för att kopiera programfiler (som anges som resursfiler och laddas ned till noden) från startaktivitetens arbetskatalog till den delade mappen och sedan köra en MSI eller setup.exe.

Vanligtvis vill du att Batch-tjänsten ska vänta tills startaktiviteten har slutförts innan noden är redo att tilldelas uppgifter. Du kan dock konfigurera detta på ett annat sätt efter behov.

Om startaktiviteten misslyckas på en beräkningsnod uppdateras nodens status med feltillståndet och noden är inte tilldelad till någon aktivitet. Startaktiviteten kan misslyckas om det inte går att kopiera aktivitetens resursfiler från lagringen, eller om processen som körs av aktivitetens kommandorad returnerar en slutkod som inte är noll.

Om du lägger till eller uppdaterar startaktiviteten för en befintlig pool måste du starta om dess beräkningsnoder för att startaktiviteten ska tillämpas på noderna.

Kommentar

Batch begränsar den totala storleken på en startaktivitet. Det här omfattar resursfiler och miljövariabler. Om du vill minska storleken på en startaktivitet finns två metoder:

  1. Du kan använda programpaket för att distribuera program eller data i varje nod i Batch-poolen. Mer information om programpaket finns i Deploy applications to compute nodes with Batch application packages (Distribuera program till beräkningsnoder med Batch-programpaket).

  2. Du kan manuellt skapa ett zippat arkiv som innehåller dina programfiler. Ladda upp ditt zippade arkiv till Azure Storage som en blob. Ange det zippade arkivet som en resursfil för startaktiviteten. Innan du kör kommandoraden för din startaktivitet packar du upp arkivet från kommandoraden.

    Du kan packa upp arkivet med valfritt arkiveringsverktyg. Du måste ta med ett verktyg för att packa upp arkivet som en resursfil för startaktiviteten.

Job Manager-aktivitet

Du använder vanligtvis en jobbhanteraraktivitet för att styra och/eller övervaka jobbkörning. Till exempel används jobbhanteraruppgifter ofta för att skapa och skicka uppgifter för ett jobb, fastställa ytterligare uppgifter som ska köras och avgöra när arbetet är klart.

En Job Manager-aktivitet är dock inte begränsad till dessa aktiviteter. Det är en fullfjädrad uppgift som kan utföra alla åtgärder som krävs för jobbet. Den kan till exempel ladda ned en fil som angetts som en parameter, analysera innehållet i filen och skicka fler aktiviteter baserat på innehållet.

En Job Manager-aktivitet startar innan alla andra aktiviteter. Den tillhandahåller följande funktioner:

  • Den skickas automatiskt som en aktivitet av Batch-tjänsten när jobbet skapas.
  • Den är schemalagd att köras innan andra aktiviteter i ett jobb.
  • Dess associerade nod är den sista som tas bort från en pool om poolens storlek minskas.
  • Dess avslut kan vara kopplat till avslutet av alla aktiviteter i jobbet.
  • En Job Manager-aktivitet får högsta prioritet om den behöver startas om. Om en inaktiv nod inte är tillgänglig kan Batch-tjänsten avsluta någon av de andra aktiviteterna som körs i poolen för att göra plats för Job Manager-aktiviteten så att den kan köras.
  • En Job Manager-aktivitet i ett jobb har inte prioritet över aktiviteter i andra jobb. Mellan jobb gäller endast prioriteringar på jobbnivå.

Jobbförberedelse- och jobbpubliceringsaktiviteter

Batch tillhandahåller jobbförberedelseaktiviteter för installation före jobbkörning och jobbpubliceringsaktiviteter för underhåll eller rensning efter jobbet.

En jobbförberedelseuppgift körs på alla beräkningsnoder som schemalagts att köra aktiviteter, innan andra jobbuppgifter körs. Du kan till exempel använda en jobbförberedelseaktivitet för att kopiera data som delas av alla aktiviteter, men som är unika för jobbet.

När ett jobb har slutförts körs en jobbpubliceringsuppgift på alla noder i poolen som har kört minst en uppgift. En jobbpubliceringsaktivitet kan till exempel ta bort data som kopierades av jobbförberedelseaktiviteten, eller komprimera och ladda upp diagnostikloggdata.

Du kan ange en kommandorad som ska köras när aktiviteten anropas både med jobbförberedelse- och jobbpubliceringsaktiviteter. De stöder funktioner som filhämtning, upphöjd körning, anpassade miljövariabler, högsta körningstid, antal omförsök och kvarhållningstid för filer.

Mer information om jobbförberedelse- och jobbpubliceringsaktiviteter finns i Köra jobbförberedelse- och jobbpubliceringsaktiviteter på Azure Batch-beräkningsnoder.

Aktivitet med flera instanser

En aktivitet med flera instanser är en aktivitet som är konfigurerad att köras på mer än en beräkningsnod samtidigt. Med uppgifter med flera instanser kan du aktivera scenarier med högpresterande databehandling som kräver en grupp beräkningsnoder som allokeras tillsammans för att bearbeta en enda arbetsbelastning, till exempel MPI (Message Passing Interface).

Detaljerad information om hur du kör MPI-jobb i Batch med hjälp av Batch .NET-biblioteket finns i Använda aktiviteter med flera instanser för att köra MPI-program (Message Passing Interface) i Azure Batch.

Beroenden mellan uppgifter

Med aktivitetsberoenden kan du, som namnet antyder, ange att en aktivitet är beroende av att andra aktiviteter slutförs innan den kan köras. Den här funktionen har stöd för situationer där en ”underordnad” aktivitet använder utdata från en ”överordnad” aktivitet, eller där en överordnad aktiviteten utför viss initiering som krävs av en underordnad aktivitet.

Om du vill använda den här funktionen måste du först aktivera aktivitetsberoenden för ditt Batch-jobb. För varje aktivitet som är beroende av en annan (eller flera andra) anger du sedan de aktiviteter som den aktiviteten är beroende av.

Med aktivitetsberoenden kan du konfigurera scenarier som följande:

  • aktivitetB är beroende av aktivitetA (aktivitetB kan inte köra förrän aktivitetA har slutförts).
  • aktivitetC är beroende av både aktivitetA och aktivitetB.
  • aktivitetD är beroende av en serie aktiviteter, till exempel aktivitet 1 till och med 10, innan den kan köras.

Mer information finns i Aktivitetsberoenden i Azure Batch och Kodexemplet TaskDependencies i GitHub-lagringsplatsen azure-batch-samples .

Miljöinställningar för aktiviteter

Varje aktivitet som utförs av Batch-tjänsten har åtkomst till miljövariabler som anges på datornoder. Detta inkluderar miljövariabler som definieras av Batch-tjänsten och anpassade miljövariabler som du kan definiera för dina uppgifter. Program och skript som dina uppgifter kör har åtkomst till dessa miljövariabler under körningen.

Du kan ange anpassade miljövariabler på aktivitets- eller jobbnivå genom att fylla i egenskapen för miljöinställningar för dessa entiteter. Mer information finns i egenskaperna Lägg till en aktivitet i en jobbåtgärd (Batch REST) eller CloudTask.EnvironmentSettings och CloudJob.CommonEnvironmentSettings i Batch .NET.

Klientprogrammet eller tjänsten kan hämta en aktivitets miljövariabler, både tjänstdefinierade och anpassade, med hjälp av åtgärden Hämta information om en aktivitet (Batch REST) eller genom att komma åt egenskapen CloudTask.EnvironmentSettings (Batch .NET). Processer som körs på en beräkningsnod kan komma åt dessa och andra miljövariabler på noden, till exempel genom att använda vanlig %VARIABLE_NAME%- (Windows) eller $VARIABLE_NAME-syntax (Linux).

Du hittar en lista över alla tjänstdefinierade miljövariabler i miljövariabler för beräkningsnoder.

Nästa steg