Taken in Azure Batch
In Azure Batch vertegenwoordigt een taak een rekeneenheid. Een taak is een verzameling van deze taken. Meer informatie over taken en taken en hoe ze worden gebruikt in een Azure Batch-werkstroom, wordt hieronder beschreven.
Projecten
Een job is een verzameling taken. Deze beheert hoe de berekening door de taken op rekenknooppunten in een pool wordt uitgevoerd.
Een taak geeft de pool aan waarin het werk moet worden uitgevoerd. U kunt voor elke job een nieuwe pool maken of één groep gebruiken voor een groot aantal jobs. U kunt een pool maken voor elke taak die is gekoppeld aan een taakplanning of één pool voor alle taken die zijn gekoppeld aan een taakplanning.
Jobprioriteit
U kunt een optionele taakprioriteit toewijzen aan taken die u maakt. De Batch-service gebruikt de prioriteitswaarde van de taak om de volgorde van de planning (voor alle taken binnen de taak) binnen elke pool te bepalen.
Als u de prioriteit van een taak wilt bijwerken, roept u de eigenschappen van een taakbewerking (Batch REST) aan of wijzigt u CloudJob.Priority (Batch .NET). Prioriteitswaarden variëren van -1000 (laagste prioriteit) tot +1000 (hoogste prioriteit).
Binnen dezelfde pool hebben taken met een hogere prioriteit voorrang op taken met een lagere prioriteit. Taken in taken met een lagere prioriteit die al worden uitgevoerd, worden niet voorafgegaan door taken in een taak met een hogere prioriteit. Taken met hetzelfde prioriteitsniveau hebben een gelijke kans om te worden gepland en de volgorde van de taakuitvoering is niet gedefinieerd.
Een taak met een hoge prioriteit die in één pool wordt uitgevoerd, heeft geen invloed op de planning van taken die worden uitgevoerd in een afzonderlijke pool of in een ander Batch-account. Taakprioriteit is niet van toepassing op autopools, die worden gemaakt wanneer de taak wordt verzonden.
Taakbeperkingen
Met beperkingen voor jobs kunt u bepaalde limieten aan uw taken stellen:
- U kunt een maximale kloktijd instellen, zodat als de uitvoering van een job langer duurt dan de maximale kloktijd die is opgegeven, de job en alle bijbehorende taken worden beëindigd.
- U kunt het maximum aantal nieuwe pogingen voor taken opgeven als een beperking, inclusief of een taak altijd opnieuw wordt geprobeerd of nooit opnieuw wordt geprobeerd. Als u een taak opnieuw probeert uit te voeren, betekent dit dat als de taak mislukt, deze opnieuw wordt uitgevoerd.
Jobmanagertaken en automatische beëindiging
De clienttoepassing kan taken toevoegen aan een taak, maar u kunt ook een jobbeheertaak opgeven. Een jobbeheertaak bevat de benodigde informatie om de vereiste taken voor een job te maken, waarbij de jobbeheertaak wordt uitgevoerd op een van de rekenknooppunten binnen de pool. De jobbeheertaak wordt specifiek verwerkt door Batch; deze wordt in de wachtrij geplaatst zodra de taak is gemaakt en opnieuw wordt gestart als deze mislukt. Een jobbeheertaak is vereist voor taken die zijn gemaakt door een jobplanning, omdat het de enige manier is om de taken te definiëren voordat de taak wordt geïnstantieerd.
Standaard blijven jobs in de actieve status wanneer alle taken binnen de job zijn voltooid. U kunt dit gedrag wijzigen zodat de job automatisch wordt beëindigd wanneer alle taken binnen de job zijn voltooid. Stel de eigenschap onAllTasksComplete (OnAllTasksComplete in Batch .NET) in op *om terminatejob
de taak automatisch te beëindigen wanneer alle taken de status Voltooid hebben.
De Batch-service beschouwt een taak zonder dat alle taken zijn voltooid. Daarom wordt deze optie meestal gebruikt met een Jobbeheertaak. Als u automatische beëindiging van taken zonder jobmanager wilt gebruiken, moet u in eerste instantie de eigenschap noaction
onAllTasksComplete van een nieuwe taak instellen op * en deze vervolgens alleen instellen terminatejob
op *nadat u klaar bent met het toevoegen van taken aan de taak.
Geplande jobs
Met behulp van jobplanningen kunt u in de Batch-service terugkerende jobs maken. Een jobplanning geeft aan wanneer u jobs moet uitvoeren en bevat de specificaties voor de uit te voeren jobs. U kunt de duur van de planning opgeven (hoe lang en wanneer de planning van kracht is) en hoe vaak taken worden gemaakt tijdens de geplande periode.
Opdrachten
Een taak is een rekeneenheid die aan een job is gekoppeld. Deze wordt uitgevoerd op een knooppunt. Taken worden toegewezen aan een knooppunt om te worden uitgevoerd of in een wachtrij geplaatst tot een knooppunt beschikbaar is. Eenvoudig gesteld: een taak voert een of meer programma's of scripts uit op een rekenknooppunt om het benodigde werk uit te voeren.
Wanneer u een taak maakt, kunt u het volgende opgeven:
De opdrachtregel van de taak. Dit is de opdrachtregel die uw toepassing of script op het rekenknooppunt uitvoert.
Het is belangrijk om te weten dat de opdrachtregel niet wordt uitgevoerd onder een shell. Daarom kan deze niet op systeemeigen wijze profiteren van shell-functies zoals omgevingsvariabele-uitbreiding (dit omvat het
PATH
). Als u van dergelijke functies wilt profiteren, moet u de shell aanroepen op de opdrachtregel, bijvoorbeeld door te startencmd.exe
op Windows-knooppunten of/bin/sh
op Linux:cmd /c MyTaskApplication.exe %MY_ENV_VAR%
/bin/sh -c MyTaskApplication $MY_ENV_VAR
Als uw taken toepassingen of scripts moeten uitvoeren die zich niet in het
PATH
van het knooppunt bevinden of verwijzen naar omgevingsvariabelen, start u de shell expliciet in de opdrachtregel van de taak.Bronbestanden die de te verwerken gegevens bevatten. In een Azure Storage-account worden deze bestanden automatisch vanuit Blob Storage naar het knooppunt gekopieerd vóórdat de opdrachtregel van de taak wordt uitgevoerd. Zie Taak starten en Bestanden en mappen voor meer informatie.
De omgevingsvariabelen die zijn vereist voor de toepassing. Zie Omgevingsinstellingen voor taken voor meer informatie.
De beperkingen waaronder de taak moet worden uitgevoerd. Beperkingen zijn bijvoorbeeld de maximale duur dat de taak mag worden uitgevoerd, het maximumaantal keren dat een taak opnieuw moet worden uitgevoerd indien deze mislukt en de maximale duur dat bestanden in de werkmap van de taak behouden blijven.
Toepassingspakketten voor het implementeren in het rekenknooppunt waarop de taak staat gepland voor uitvoering. Toepassingspakketten bieden vereenvoudigde implementatie en versies van de toepassingen die de taken uitvoeren. Toepassingspakketten op taakniveau zijn met name nuttig in omgevingen met gedeelde groepen. Verschillende jobs worden uitgevoerd op één groep en de groep wordt niet verwijderd wanneer een job is voltooid. Als de job minder taken dan knooppunten in de groep heeft, kunnen toepassingspakketten van taken gegevensoverdracht minimaliseren omdat uw toepassing alleen wordt geïmplementeerd op de knooppunten die taken uitvoeren.
Een verwijzing naar een containerinstallatiekopie in Docker Hub of een persoonlijk register en extra instellingen voor het maken van een Docker-container waarin de taak wordt uitgevoerd op het knooppunt. U geeft deze informatie alleen op als de pool is ingesteld met een containerconfiguratie.
Notitie
De maximale levensduur van een taak, van het toevoegen aan de job tot de voltooiing, bedraagt 180 dagen. Voltooide taken blijven gedurende zeven dagen aanwezig; gegevens voor taken die niet binnen de maximale levensduur zijn voltooid, zijn niet toegankelijk.
Naast de taken die u definieert voor het uitvoeren van berekeningen op een knooppunt, worden er ook verschillende speciale taken geleverd door de Batch-service:
- Begintaak
- Jobbeheertaak
- Jobvoorbereidingstaken en jobvrijgevingstaken
- Taken met meerdere exemplaren
- Taakafhankelijkheden
Begintaak
Door een begintaak aan een pool te koppelen, kunt u de besturingsomgeving van de knooppunten ervan voorbereiden. U kunt bijvoorbeeld acties uitvoeren als het installeren van de toepassingen die de taken uitvoeren en het starten van achtergrondprocessen. De begintaak wordt uitgevoerd telkens wanneer een knooppunt wordt gestart, zolang het in de pool blijft. Dit geldt ook wanneer het knooppunt voor het eerst wordt toegevoegd aan de pool en wanneer het opnieuw wordt opgestart of opnieuw wordt gemaakt.
Een belangrijk voordeel van de begintaak is dat deze alle informatie bevat die nodig is voor het configureren van een rekenknooppunt en het installeren van de toepassingen die vereist zijn voor het uitvoeren van de taak. Het verhogen van het aantal knooppunten in een pool is daarom net zo eenvoudig als het opgeven van een nieuw aantal doelknooppunten. De begintaak bevat de informatie die nodig is voor de Batch-service om de nieuwe knooppunten te configureren en deze gereed te maken voor het accepteren van taken.
Net als bij elke Azure Batch-taak kunt u een lijst met resourcebestanden opgeven in Azure Storage, naast een opdrachtregel die moet worden uitgevoerd. De Batch-service kopieert eerst de resourcebestanden naar het knooppunt vanuit Azure Storage en voert vervolgens de opdrachtregel uit. Voor een pool-begintaak bevat de lijst met bestanden meestal de taaktoepassing en de bijbehorende afhankelijkheden.
De begintaak kan echter ook referentiegegevens bevatten die worden gebruikt door alle taken die op het rekenknooppunt worden uitgevoerd. De opdrachtregel van een begintaak kan bijvoorbeeld een robocopy
bewerking uitvoeren voor het kopiëren van toepassingsbestanden (die zijn opgegeven als resourcebestanden en zijn gedownload naar het knooppunt) vanuit de werkmap van de begintaak naar de gedeelde map, en vervolgens een MSI of setup.exe
uitvoeren.
Meestal wilt u dat de Batch-service wacht totdat de begintaak is voltooid voordat het knooppunt gereed is om taken toe te wijzen. U kunt dit echter naar behoefte anders configureren.
Als een begintaak op een rekenknooppunt mislukt, wordt de status van het knooppunt bijgewerkt om de fout aan te geven en is het knooppunt niet beschikbaar om taken toe te wijzen. Een begintaak kan mislukken als er een probleem optreedt bij het kopiëren van de bronbestanden van de begintaak uit de opslag, of als het proces dat door de opdrachtregel ervan wordt uitgevoerd een andere afsluitcode dan nul retourneert.
Als u de begintaak voor een bestaande pool toevoegt of bijwerkt, moet u de rekenknooppunten voor de begintaak opnieuw toepassen op de knooppunten.
Notitie
Batch beperkt de totale grootte van een begintaak, inclusief bronbestanden en omgevingsvariabelen. Als u de grootte van een begintaak wilt beperken, kunt u dat op twee manieren doen:
U kunt toepassingspakketten gebruiken om toepassingen of gegevens te distribueren naar elk knooppunt in de Batch-pool. Zie Deploy applications to compute nodes with Batch application packages (Toepassingen implementeren naar rekenknooppunten met Batch-toepassingspakketten) voor meer informatie over toepassingspakketten.
U kunt handmatig een ZIP-archief maken dat uw toepassingsbestanden bevat. Upload het ZIP-archief als een blob naar Azure Storage. Geef het ZIP-archief op als bronbestand voor de begintaak. Voordat u de opdrachtregel voor de begintaak uitvoert, moet u het archief uitpakken vanaf de opdrachtregel.
Daarvoor kunt u elk gewenst hulpprogramma voor archivering gebruiken. U moet het hulpprogramma dat u gebruikt om het archief uit te pakken, als bronbestand voor de begintaak opnemen.
Jobbeheertaak
Doorgaans gebruikt u een taak voor taakbeheer om de uitvoering van taken te beheren en/of te bewaken. Jobbeheertaken worden bijvoorbeeld vaak gebruikt voor het maken en verzenden van de taken voor een taak, het bepalen van extra taken die moeten worden uitgevoerd en bepalen wanneer het werk is voltooid.
Een jobbeheertaak is echter niet beperkt tot deze activiteiten. Het is een volwaardige taak die alle acties kan uitvoeren die vereist zijn voor de taak. Een jobbeheertaak kan bijvoorbeeld een bestand downloaden dat als een parameter is opgegeven, de inhoud van dat bestand analyseren en op basis van die inhoud aanvullende taken verzenden.
Een jobbeheertaak wordt vóór alle andere taken gestart. Deze biedt de volgende functies:
- Een jobbeheertaak wordt automatisch door de Batch-service verzonden als een taak wanneer de job wordt gemaakt.
- De uitvoering van een jobbeheertaak wordt gepland voor de andere taken in een job.
- Het hieraan gekoppelde knooppunt is het laatste dat moeten worden verwijderd uit een pool wanneer de pool wordt verkleind.
- De beëindiging ervan kan worden gekoppeld aan de beëindiging van alle taken in de job.
- Een jobbeheertaak krijgt de hoogste prioriteit wanneer deze opnieuw moet worden gestart. Als een niet-actief knooppunt niet beschikbaar is, kan de Batch-service een van de andere actieve taken in de pool beëindigen om ruimte te maken voor het uitvoeren van de jobbeheertaak.
- Een jobbeheertaak in de ene job heeft geen hogere prioriteit dan de taken van andere jobs. Tussen jobs worden alleen prioriteiten op jobniveau in acht genomen.
Jobvoorbereidingstaken en jobvrijgevingstaken
Batch biedt jobvoorbereidingstaken voor het instellen van de uitvoering van de taak en jobreleasetaken voor onderhoud na de taak of opschoning.
Een jobvoorbereidingstaak wordt uitgevoerd op alle rekenknooppunten die zijn gepland om taken uit te voeren, voordat een van de andere taken van de job wordt uitgevoerd. U kunt bijvoorbeeld een taakvoorbereidingstaak gebruiken om gegevens te kopiëren die door alle taken worden gedeeld, maar uniek zijn voor de taak.
Wanneer een job is voltooid, wordt er een jobvrijgevingstaak uitgevoerd op elk knooppunt in de pool dat ten minste één taak heeft uitgevoerd. Een jobreleasetaak kan bijvoorbeeld gegevens verwijderen die zijn gekopieerd door de taakvoorbereidingstaak, of het kan diagnostische logboekgegevens comprimeren en uploaden.
Met zowel jobvoorbereidingstaken als jobvrijgevingstaken kunt u een opdrachtregel opgeven die moet worden uitgevoerd wanneer de taak wordt gestart. Ze bieden functies zoals het downloaden van bestanden, uitvoering met verhoogde bevoegdheden, aangepaste omgevingsvariabelen, maximale uitvoeringsduur, aantal pogingen en bewaartijd voor bestanden.
Zie Run job preparation and completion tasks on Azure Batch compute nodes (Jobvoorbereidings- en jobvrijgevingstaken uitvoeren op Azure Batch-rekenknooppunten) voor meer informatie over jobvoorbereidings- en jobvrijgevingstaken.
Taak met meerdere instanties
Een taak met meerdere instanties is een taak die is geconfigureerd om op meer dan één rekenknooppunt tegelijk te worden uitgevoerd. Met taken met meerdere exemplaren kunt u high-performance computingscenario's inschakelen waarvoor een groep rekenknooppunten is vereist die samen worden toegewezen voor het verwerken van één workload, zoals Message Passing Interface (MPI).
Zie Taken met meerdere instanties gebruiken om Message Passing Interface (MPI)-toepassingen uit te voeren in Azure Batch voor gedetailleerde informatie over het uitvoeren van MPI-jobs in Batch met behulp van de Batch .NET-bibliotheek.
Taakafhankelijkheden
Zoals de naam al aangeeft, kunt u met taakafhankelijkheden opgeven dat een taak afhangt van de voltooiing van andere taken voordat deze wordt uitgevoerd. Deze functie biedt ondersteuning voor situaties waarin een 'downstream'-taak gebruikmaakt van de uitvoer van een 'upstream'-taak, of wanneer een 'upstream'-taak initialisaties uitvoert die zijn vereist voor een 'downstream'-taak.
Als u deze functie wilt gebruiken, moet u eerst taakafhankelijkheden voor uw Batch-taak inschakelen. Daarna geeft u voor elke taak die afhankelijk is van een andere (of vele andere), de taken op waarvan die taak afhankelijk is.
Bij taakafhankelijkheden kunt u scenario's zoals de volgende configureren:
- taakB hangt af van taakA (taakB kan pas worden uitgevoerd nadat taakA is voltooid).
- taakC is afhankelijk van taakA én taakB.
- taakD is afhankelijk van een bereik van taken, zoals taken 1 t/m 10, voordat deze wordt uitgevoerd.
Zie Taakafhankelijkheden in Azure Batch en het codevoorbeeld TaskDependencies in de GitHub-opslagplaats azure-batch-samples voor meer informatie.
Omgevingsinstellingen voor taken
Elke taak die wordt uitgevoerd door de Batch-service heeft toegang tot de omgevingsvariabelen die zijn ingesteld op de rekenknooppunten. Dit omvat omgevingsvariabelen die zijn gedefinieerd door de Batch-service en aangepaste omgevingsvariabelen die u voor uw taken kunt definiëren. Toepassingen en scripts die door uw taken worden uitgevoerd, hebben tijdens de uitvoering toegang tot deze omgevingsvariabelen.
U kunt aangepaste omgevingsvariabelen instellen op het niveau van de taak of de job door voor deze entiteiten de eigenschap voor omgevingsinstellingen in te vullen. Zie de eigenschappen Een taak toevoegen aan een taakbewerking (Batch REST) of de eigenschappen CloudTask.EnvironmentSettings en CloudJob.CommonEnvironmentSettings in Batch .NET voor meer informatie.
Uw clienttoepassing of -service kan de omgevingsvariabelen, zowel door de service gedefinieerde als aangepaste, verkrijgen met behulp van de bewerking Get information about a task (Batch REST) of via de eigenschap CloudTask.EnvironmentSettings (Batch .NET). Processen die op een rekenknooppunt worden uitgevoerd, kunnen ook toegang krijgen tot deze en andere omgevingsvariabelen in het knooppunt, bijvoorbeeld met behulp van de vertrouwde syntaxis van %VARIABLE_NAME%
(Windows) of $VARIABLE_NAME
(Linux).
U vindt een lijst met alle door de service gedefinieerde omgevingsvariabelen in omgevingsvariabelen voor rekenknooppunten.
Volgende stappen
- Meer informatie over bestanden en mappen.