Jobs en taken in Azure Batch
In Azure Batch vertegenwoordigt een taak een rekeneenheid. Een job is een verzameling van deze taken. Meer informatie over jobs en taken en hoe deze worden gebruikt in een Azure Batch werkstroom, wordt hieronder beschreven.
Taken
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 jobplanning, of één pool voor alle jobs die zijn gekoppeld aan een jobplanning.
Jobprioriteit
U kunt een optionele jobprioriteit toewijzen aan taken die u maakt. De Batch-service gebruikt de prioriteitswaarde van de job om de volgorde van de planning (voor alle taken binnen de job) te bepalen in elke pool.
Als u de prioriteit van een taak wilt bijwerken, roept u De eigenschappen van een taakbewerking bijwerken (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 jobs met een hogere prioriteit planningsprioriteit boven jobs met een lagere prioriteit. Taken in jobs met een lagere prioriteit die al worden uitgevoerd, worden niet door taken in een job met een hogere prioriteit vervangen. Taken met hetzelfde prioriteitsniveau hebben een gelijke kans om te worden gepland en de volgorde van de taakuitvoering is niet gedefinieerd.
Een job 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 taak nieuwe taken opgeven als een beperking, inclusief of een taak altijd opnieuw wordt proberen of nooit opnieuw wordt onderhersteld. Het opnieuw proberen van een taak betekent dat als de taak mislukt, deze opnieuw wordt in dequequeued om opnieuw te worden uitgevoerd.
Jobbeheertaken 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 wordt opnieuw gestart als deze mislukt. Een jobbeheertaak is vereist voor jobs die door een jobplanning worden gemaakt,omdat dit de enige manier is om de taken te definiëren voordat de job wordt gemaakt.
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) van de job in op *' om de job automatisch te beëindigen wanneer alle taken de status Voltooid terminatejob hebben.
De Batch-service beschouwt een job zonder taken om alle taken uit te voeren. Daarom wordt deze optie meestal gebruikt met een Jobbeheertaak. Als u automatische jobbeëindiging wilt gebruiken zonder jobbeheer, moet u eerst de eigenschap onAllTasksComplete van een nieuwe job instellen op en deze vervolgens instellen op *' pas nadat u klaar bent met het toevoegen van taken aan de noaction terminatejob job.
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.
Taken
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 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 starten op Windowscmd.exeknooppunten of/bin/shop Linux:cmd /c MyTaskApplication.exe %MY_ENV_VAR%/bin/sh -c MyTaskApplication $MY_ENV_VARAls uw taken toepassingen of scripts moeten uitvoeren die zich niet in het
PATHvan 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 om berekeningen uit te voeren op een knooppunt, worden er ook verschillende speciale taken geleverd door de Batch-service:
- Begintaak
- Jobbeheertaak
- Jobvoorbereidingstaken en jobvrijgevingstaken
- Taken met meerdere instanties
- 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 telkens uitgevoerd wanneer een knooppunt wordt gestart, zolang deze in de pool blijft. Dit omvat wanneer het knooppunt voor het eerst wordt toegevoegd aan de pool en wanneer het opnieuw wordt opgestart of een nieuwe animatie 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 voor te maken voor het accepteren van taken.
Net als bij elke andere Azure Batch-taak kunt u een lijst met resourcebestanden in Azure Storage opgeven, naast een uit te voeren opdrachtregel. 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 bewerking uitvoeren om toepassingsbestanden (die zijn opgegeven als resourcebestanden en gedownload naar het knooppunt) te kopiëren van de werkmap van de begintaak naar de gedeelde map en vervolgens een MSI of uit te robocopy setup.exe voeren.
Normaal gesproken wilt u dat de Batch-service wacht tot de begintaak is voltooid voordat u overweegt dat het knooppunt klaar is om taken toe te worden toegewezen. 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 jobbeheertaak om de uitvoering van een job te controleren en/of te controleren. Jobbeheertaken worden bijvoorbeeld vaak gebruikt om de taken voor een job te maken en te verzenden, om te bepalen welke extra taken moeten worden uitgevoerd en om te bepalen wanneer het werk is voltooid.
Een jobbeheertaak is echter niet beperkt tot deze activiteiten. Het is een volledige 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 de installatie vóór de jobuitvoering en jobvrijstellingstaken voor onderhoud of opschoning na de job.
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 jobvoorbereidingstaak gebruiken om gegevens te kopiëren die worden gedeeld door alle taken, maar die uniek zijn voor de job.
Wanneer een job is voltooid, wordt er een jobvrijgevingstaak uitgevoerd op elk knooppunt in de pool dat ten minste één taak heeft uitgevoerd. Een job-releasetaak kan bijvoorbeeld gegevens verwijderen die zijn gekopieerd door de jobvoorbereidingstaak, of 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 computing-scenario's inschakelen waarvoor een groep rekenknooppunten is vereist die samen zijn 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 inschakelen voor uw Batch-job. 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 azure-batch-samples GitHub opslagplaats.
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 taak (Batch REST) of 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 Omgevingsvariabelenvoor reken knooppunt.
Volgende stappen
- Meer informatie over bestanden en mappen.