Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze quickstart ziet u hoe u aan de slag gaat met Azure Batch door een app uit te voeren die gebruikmaakt van de Azure Batch-bibliotheken voor Python. De Python-app:
- Uploadt verschillende invoergegevensbestanden naar een Azure Storage-blobcontainer die moet worden gebruikt voor Batch-taakverwerking.
- Hiermee maakt u een pool van twee virtuele machines (VM's) of rekenknooppunten waarop het Ubuntu 22.04 LTS-besturingssysteem wordt uitgevoerd.
- Hiermee wordt een job en drie taken aangemaakt die op de knooppunten moeten worden uitgevoerd. Elke taak verwerkt een van de invoerbestanden met behulp van een Bash-shell-opdrachtregel.
- Geeft de uitvoerbestanden weer die door de taken geleverd worden.
Nadat u deze quickstart hebt voltooid, begrijpt u de belangrijkste concepten van de Batch-service en kunt u Batch gebruiken met realistischere, grotere workloads.
Vereiste voorwaarden
Een Azure-account met een actief abonnement. Als u nog geen account hebt, maakt u gratis een account.
Een Batch-account met een gekoppeld Azure Storage-account. U kunt de accounts maken met behulp van een van de volgende methoden: Azure CLI | | Bicep ARM-sjabloon | | Terraform.
De app uitvoeren
Als u deze quickstart wilt voltooien, downloadt of kloont u de Python-app, geeft u de accountwaarden op, voert u de app uit en controleert u de uitvoer.
De app downloaden of klonen
Download of kloon de Azure Batch Python Quickstart-app van GitHub. Gebruik de volgende opdracht om de app-opslagplaats te klonen met een Git-client:
git clone https://github.com/Azure-Samples/batch-python-quickstart.gitSchakel over naar de map batch-python-quickstart/src en installeer de vereiste pakketten met behulp van
pip.pip install -r requirements.txt
Geef uw accountgegevens op
De Python-app moet de namen van uw Batch- en Storage-account, accountsleutelwaarden en het Eindpunt van het Batch-account gebruiken. U kunt deze informatie ophalen uit Azure Portal, Azure-API's of opdrachtregelprogramma's.
Ga als volgende te werk om uw accountgegevens op te halen uit Azure Portal:
- Zoek en selecteer uw Batch-accountnaam in de Azure Search-balk.
- Selecteer sleutels in de linkernavigatiebalk op de pagina van uw Batch-account.
- Kopieer op de pagina Sleutels de volgende waarden:
- Batchaccount
- Accounteindpunt
- Primaire toegangssleutel
- opslagaccountnaam
- Sleutel1
Bewerk in de gedownloade Python-app de volgende tekenreeksen in het config.py-bestand om de waarden op te geven die u hebt gekopieerd.
BATCH_ACCOUNT_NAME = '<batch account>'
BATCH_ACCOUNT_KEY = '<primary access key>'
BATCH_ACCOUNT_URL = '<account endpoint>'
STORAGE_ACCOUNT_NAME = '<storage account name>'
STORAGE_ACCOUNT_KEY = '<key1>'
Belangrijk
Het beschikbaar maken van accountsleutels in de app-bron wordt niet aanbevolen voor productiegebruik. U moet de toegang tot referenties beperken en ernaar verwijzen in uw code met behulp van variabelen of een configuratiebestand. Het is raadzaam om batch- en opslagaccountsleutels op te slaan in Azure Key Vault.
De app uitvoeren en uitvoer weergeven
Voer de app uit om de Batch-werkstroom in actie te zien.
python python_quickstart_client.py
De gebruikelijke uitvoeringstijd is ongeveer drie minuten. De eerste installatie van het poolknooppunt duurt het meest.
De app retourneert uitvoer die vergelijkbaar is met het volgende voorbeeld:
Sample start: 11/26/2012 4:02:54 PM
Uploading file taskdata0.txt to container [input]...
Uploading file taskdata1.txt to container [input]...
Uploading file taskdata2.txt to container [input]...
Creating pool [PythonQuickstartPool]...
Creating job [PythonQuickstartJob]...
Adding 3 tasks to job [PythonQuickstartJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
Er is een pauze tijdens Monitoring all tasks for 'Completed' state, timeout in 00:30:00... wanneer de rekenknooppunten van de pool beginnen. Wanneer taken worden aangemaakt, plaatst Batch ze in de wachtrij voor uitvoering in de pool. Zodra het eerste rekenknooppunt beschikbaar is, wordt de eerste taak uitgevoerd op het knooppunt. U kunt de status van knooppunten, taken en opdrachten controleren vanaf de pagina van uw Batch-account in het Azure-portaal.
Nadat elke taak is voltooid, ziet u uitvoer die lijkt op het volgende voorbeeld:
Printing task output...
Task: Task0
Node: tvm-2850684224_3-20171205t000401z
Standard output:
Batch processing began with mainframe computers and punch cards. Today it still plays a central role...
De code controleren
Bekijk de code om inzicht te hebben in de stappen in de Snelstartgids voor Azure Batch Python.
Dienstclients maken en bronbestanden uploaden
De app maakt een BlobServiceClient-object om te communiceren met het opslagaccount.
blob_service_client = BlobServiceClient( account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/", credential=config.STORAGE_ACCOUNT_KEY )De app gebruikt de
blob_service_clientverwijzing om een container in het opslagaccount te maken en gegevensbestanden te uploaden naar de container. De bestanden in de opslag zijn gedefinieerd als Batch ResourceFile-objecten die later met Batch kunnen worden gedownload op rekenknooppunten.input_file_paths = [os.path.join(sys.path[0], 'taskdata0.txt'), os.path.join(sys.path[0], 'taskdata1.txt'), os.path.join(sys.path[0], 'taskdata2.txt')] input_files = [ upload_file_to_container(blob_service_client, input_container_name, file_path) for file_path in input_file_paths]De app maakt een BatchServiceClient-object voor het maken en beheren van pools, taken en taken in het Batch-account. De Batch-client maakt gebruik van verificatie met gedeelde sleutels. Batch biedt ook ondersteuning voor Microsoft Entra-verificatie.
credentials = SharedKeyCredentials(config.BATCH_ACCOUNT_NAME, config.BATCH_ACCOUNT_KEY) batch_client = BatchServiceClient( credentials, batch_url=config.BATCH_ACCOUNT_URL)
Een pool met rekenknooppunten maken
Voor het maken van een Batch-pool gebruikt de app de klasse PoolAddParameter om het aantal knooppunten, de VM-grootte en de poolconfiguratie in te stellen. Het volgende VirtualMachineConfiguration-object geeft een ImageReference op voor een Ubuntu Server 22.04 LTS Azure Marketplace-installatiekopie. Batch ondersteunt een breed scala aan Linux- en Windows Server Marketplace-installatiekopieën en ondersteunt ook aangepaste VM-installatiekopieën.
De POOL_NODE_COUNT en POOL_VM_SIZE zijn gedefinieerde constanten. De app maakt een pool van twee knooppunten van grootte Standard_DS1_v2. Deze grootte biedt een goede balans tussen prestaties en kosten voor deze quickstart.
De methode pool.add verzendt de pool naar de Batch-service.
new_pool = batchmodels.PoolAddParameter(
id=pool_id,
virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
image_reference=batchmodels.ImageReference(
publisher="canonical",
offer="0001-com-ubuntu-server-focal",
sku="22_04-lts",
version="latest"
),
node_agent_sku_id="batch.node.ubuntu 22.04"),
vm_size=config.POOL_VM_SIZE,
target_dedicated_nodes=config.POOL_NODE_COUNT
)
batch_service_client.pool.add(new_pool)
Een Batch-taak maken
Een Batch-taak is een logische groepering van een of meer taken. De taak bevat instellingen die gebruikelijk zijn voor de taken, zoals prioriteit en de pool waarop taken moeten worden uitgevoerd.
De app gebruikt de klasse JobAddParameter om een taak in de pool te maken. Met de methode job.add wordt de taak toegevoegd aan het opgegeven Batch-account. In eerste instantie heeft de taak geen taken.
job = batchmodels.JobAddParameter(
id=job_id,
pool_info=batchmodels.PoolInformation(pool_id=pool_id))
batch_service_client.job.add(job)
Taken aanmaken
Batch biedt verschillende manieren om apps en scripts te implementeren op rekenknooppunten. Met deze app maakt u een lijst met taakobjecten met behulp van de klasse TaskAddParameter . Elke taak verwerkt een invoerbestand met behulp van een command_line parameter om een app of script op te geven.
Met het volgende script worden de invoerobjecten resource_files verwerkt door de Bash-shell-opdracht cat uit te voeren om de tekstbestanden weer te geven. De app gebruikt vervolgens de task.add_collection methode om elke taak toe te voegen aan de taak, waarmee de taken in de wachtrij worden geplaatst voor uitvoering op de rekenknooppunten.
tasks = []
for idx, input_file in enumerate(resource_input_files):
command = f"/bin/bash -c \"cat {input_file.file_path}\""
tasks.append(batchmodels.TaskAddParameter(
id=f'Task{idx}',
command_line=command,
resource_files=[input_file]
)
)
batch_service_client.task.add_collection(job_id, tasks)
Taakuitvoer weergeven
De app bewaakt de taakstatus om ervoor te zorgen dat de taken zijn voltooid. Wanneer elke taak succesvol wordt uitgevoerd, schrijft de uitvoer van het taakcommando naar het stdout.txt-bestand . De app geeft vervolgens het stdout.txt bestand weer voor elke voltooide taak.
tasks = batch_service_client.task.list(job_id)
for task in tasks:
node_id = batch_service_client.task.get(job_id, task.id).node_info.node_id
print(f"Task: {task.id}")
print(f"Node: {node_id}")
stream = batch_service_client.file.get_from_task(
job_id, task.id, config.STANDARD_OUT_FILE_NAME)
file_text = _read_stream_as_string(
stream,
text_encoding)
if text_encoding is None:
text_encoding = DEFAULT_ENCODING
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = text_encoding)
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = text_encoding)
print("Standard output:")
print(file_text)
Hulpmiddelen opruimen
De app verwijdert automatisch de opslagcontainer die wordt gemaakt en biedt u de mogelijkheid om de Batch-pool en -taak te verwijderen. Pools en knooppunten brengen kosten met zich mee terwijl de knooppunten actief zijn, zelfs als ze geen taken uitvoeren. Als u de pool niet meer nodig hebt, verwijdert u deze.
Wanneer u uw Batch-resources niet meer nodig hebt, kunt u de resourcegroep met deze resources verwijderen. Selecteer in Azure Portal de optie Resourcegroep verwijderen boven aan de pagina van de resourcegroep. Voer in het scherm Een resourcegroep verwijderen de naam van de resourcegroep in en selecteer vervolgens Verwijderen.
Volgende stappen
In deze quickstart hebt u een app uitgevoerd die gebruikmaakt van de Batch Python-API om een Batch-pool, -knooppunten, -taak en -taken te maken. De taak heeft bronbestanden geüpload naar een opslagcontainer, taken uitgevoerd op de knooppunten en uitvoer van de knooppunten weergegeven.
Nu u de belangrijkste concepten van de Batch-service begrijpt, bent u klaar om Batch te gebruiken met realistischere, grotere workloads. Als u meer wilt weten over Azure Batch en een parallelle workload wilt doorlopen met een echte toepassing, gaat u verder met de zelfstudie over Batch Python.