Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser Schnellstartanleitung erfahren Sie, wie Sie mit Azure Batch beginnen, indem Sie eine App ausführen, die die Azure Batch-Bibliotheken für Python verwendet. Die Python-App:
- Lädt mehrere Eingabedatendateien in einen Azure Storage-BLOB-Container hoch, der für die Verarbeitung von Batchaufgaben verwendet werden soll.
- Erstellt einen Pool von zwei virtuellen Computern (VMs) oder Computeknoten mit Ubuntu 22.04 LTS OS.
- Es werden ein Auftrag und drei Aufgaben für die Ausführung auf den Knoten erstellt. Jede Aufgabe verarbeitet eine der Eingabedateien mithilfe einer Bash-Shell-Befehlszeile.
- Zeigt die Ausgabedateien an, die die Aufgaben zurückgeben.
Nachdem Sie diese Schnellstartanleitung abgeschlossen haben, sind Sie mit den wichtigsten Konzepten des Batch-Diensts vertraut und verwenden Batch mit realistischeren, umfangreicheren Workloads.
Voraussetzungen
Ein Azure-Konto mit einem aktiven Abonnement. Erstellen Sie ein kostenloses Konto, falls Sie keines besitzen.
Ein Batchkonto mit einem verknüpften Azure Storage-Konto. Sie können die Konten mithilfe einer der folgenden Methoden erstellen: Azure CLI-Portal | | Bicep | ARM-Vorlage | Terraform.
Python Version 3.8 oder höher, die den Pip-Paket-Manager enthält.
App starten
Um diese Schnellstartanleitung abzuschließen, laden Sie die Python-App herunter oder klonen sie, geben Sie Ihre Kontowerte an, führen Sie die App aus, und überprüfen Sie die Ausgabe.
Herunterladen oder Klonen der App
Laden Sie die Azure Batch Python-Schnellstart-App von GitHub herunter, oder klonen Sie sie. Verwenden Sie den folgenden Befehl, um das App-Repository mit einem Git-Client zu klonen:
git clone https://github.com/Azure-Samples/batch-python-quickstart.gitWechseln Sie zum Ordner batch-python-quickstart/src , und installieren Sie die erforderlichen Pakete mithilfe von
pip.pip install -r requirements.txt
Geben Sie Ihre Kontoinformationen an
Die Python-App muss Ihre Batch- und Speicherkontonamen, Kontoschlüsselwerte und Batchkontoendpunkt verwenden. Sie können diese Informationen über das Azure-Portal, Azure-APIs oder Befehlszeilentools abrufen.
So rufen Sie Ihre Kontoinformationen aus dem Azure-Portal ab:
- Suchen Sie in der Azure Search-Leiste nach dem Namen Ihres Batch-Kontos, und wählen Sie ihn aus.
- Wählen Sie auf der Seite Ihres Batch-Kontos im linken Navigationsbereich die Option Schlüssel aus.
- Kopieren Sie auf der Seite "Schlüssel " die folgenden Werte:
- Batchkonto
- Kontoendpunkt
- Primärer Zugriffsschlüssel
- Speicherkontoname
- Key1
Bearbeiten Sie in Ihrer heruntergeladenen Python-App die folgenden Zeichenfolgen in der config.py-Datei , um die werte zu liefern, die Sie kopiert haben.
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>'
Von Bedeutung
Das Verfügbarmachen von Kontoschlüsseln in der App-Quelle wird für die Produktionsverwendung nicht empfohlen. Sie sollten den Zugriff auf Anmeldeinformationen einschränken und in Ihrem Code mithilfe von Variablen oder einer Konfigurationsdatei darauf verweisen. Es ist am besten, Batch- und Speicherkontoschlüssel in Azure Key Vault zu speichern.
Führen Sie die App aus und betrachten Sie die Ausgabe
Führen Sie die App aus, um den Batchworkflow in Aktion anzuzeigen.
python python_quickstart_client.py
Die typische Laufzeit beträgt ungefähr drei Minuten. Die Einrichtung des initialen Poolknotens nimmt am meisten Zeit in Anspruch.
Die App gibt eine Ausgabe zurück, die dem folgenden Beispiel ähnlich ist:
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...
Es entsteht eine Pause bei Monitoring all tasks for 'Completed' state, timeout in 00:30:00..., während die Computeknoten des Pools starten. Wenn Aufgaben erstellt werden, reiht Batch sie in die Warteschlange ein, um sie im Pool auszuführen. Sobald der erste Computeknoten verfügbar ist, wird die erste Aufgabe auf dem Knoten ausgeführt. Sie können den Knoten-, Aufgaben- und Auftragsstatus auf Der Seite "Batchkonto" im Azure-Portal überwachen.
Nachdem jeder Vorgang abgeschlossen ist, wird eine Ausgabe angezeigt, die dem folgenden Beispiel ähnelt:
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...
Überprüfen des Codes
Überprüfen Sie den Code, um die Schritte in der Schnellstartanleitung von Azure Batch Python zu verstehen.
Erstellen von Dienstclients und Hochladen von Ressourcendateien
Die App erstellt ein BlobServiceClient-Objekt für die Interaktion mit dem Speicherkonto.
blob_service_client = BlobServiceClient( account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/", credential=config.STORAGE_ACCOUNT_KEY )Die App verwendet den
blob_service_clientVerweis, um einen Container im Speicherkonto zu erstellen und Datendateien in den Container hochzuladen. Die Dateien im Speicher werden als Batch-ResourceFile-Objekte definiert, die von Batch später auf Computeknoten heruntergeladen werden können.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]Die App erstellt ein BatchServiceClient-Objekt zum Erstellen und Verwalten von Pools, Aufträgen und Aufgaben im Batchkonto. Der Batchclient verwendet die gemeinsame Schlüsselauthentifizierung. Batch unterstützt auch die Microsoft Entra-Authentifizierung.
credentials = SharedKeyCredentials(config.BATCH_ACCOUNT_NAME, config.BATCH_ACCOUNT_KEY) batch_client = BatchServiceClient( credentials, batch_url=config.BATCH_ACCOUNT_URL)
Erstellen eines Pools mit Computeknoten
Zum Erstellen eines Batchpools verwendet die App die PoolAddParameter-Klasse , um die Anzahl von Knoten, VM-Größe und Poolkonfiguration festzulegen. Das folgende VirtualMachineConfiguration -Objekt gibt ein ImageReference für ein Ubuntu Server 22.04 LTS Azure Marketplace-Image an. Batch unterstützt eine vielzahl von Linux- und Windows Server Marketplace-Images und unterstützt auch benutzerdefinierte VM-Images.
Die POOL_NODE_COUNT und POOL_VM_SIZE sind definierte Konstanten. Die App erstellt einen Pool mit zwei Knoten der Größe Standard_DS1_v2. Diese Größe bietet ein gutes Verhältnis von Leistung zu Kosten für diesen Schnellstart.
Die pool.add-Methode sendet den Pool an den Batchdienst.
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)
Erstellen eines Batchauftrags
Ein Batchauftrag ist eine logische Gruppierung einer oder mehrerer Aufgaben. Der Auftrag enthält gemeinsame Einstellungen für Aufgaben, z. B. die Priorität und den Pool zum Ausführen von Aufgaben.
Die App verwendet die JobAddParameter-Klasse, um im Pool einen Auftrag zu erstellen. Die Methode job.add fügt den Auftrag dem angegebenen Batchkonto hinzu. Zunächst hat der Job keine Aufgaben.
job = batchmodels.JobAddParameter(
id=job_id,
pool_info=batchmodels.PoolInformation(pool_id=pool_id))
batch_service_client.job.add(job)
Aufgaben erstellen
In Batch gibt es mehrere Möglichkeiten, Apps und Skripts auf Computeknoten bereitzustellen. Diese App erstellt eine Liste von Aufgabenobjekten mithilfe der TaskAddParameter-Klasse . Jede Aufgabe verarbeitet eine Eingabedatei mithilfe eines command_line Parameters, um eine App oder ein Skript anzugeben.
Das folgende Skript verarbeitet die Eingabeobjekte resource_files , indem der Bash-Shellbefehl cat ausgeführt wird, um die Textdateien anzuzeigen. Die App verwendet dann die task.add_collection-Methode, um jede Aufgabe dem Auftrag hinzuzufügen, wodurch die Aufgaben zur Ausführung auf den Rechenknoten in die Warteschlange gestellt werden.
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)
Anzeigen der Aufgabenausgabe
Die App überwacht den Aufgabenstatus, um sicherzustellen, dass die Aufgaben abgeschlossen sind. Wenn jede Aufgabe erfolgreich ausgeführt wird, schreibt der Aufgabenbefehl in die Datei stdout.txt. Die App zeigt dann die stdout.txt Datei für jede abgeschlossene Aufgabe an.
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)
Bereinigen von Ressourcen
Die App löscht automatisch den erstellten Speichercontainer und bietet Ihnen die Möglichkeit, den Batchpool und den Auftrag zu löschen. Für Pools und Knoten fallen Gebühren an, während die Knoten ausgeführt werden, auch wenn sie keine Aufträge ausführen. Wenn Sie den Pool nicht mehr benötigen, löschen Sie ihn.
Wenn Sie Ihre Batchressourcen nicht mehr benötigen, können Sie die Ressourcengruppe löschen, die sie enthält. Wählen Sie im Azure-Portal oben auf der Seite "Ressourcengruppe löschen " aus. Geben Sie auf dem Bildschirm " Ressourcengruppe löschen" den Namen der Ressourcengruppe ein, und wählen Sie dann "Löschen" aus.
Nächste Schritte
In dieser Schnellstartanleitung haben Sie eine App ausgeführt, die die Batch-Python-API verwendet, um einen Batchpool, Knoten, Auftrag und Aufgaben zu erstellen. Der Auftrag hat Ressourcendateien in einen Speichercontainer hochgeladen, Aufgaben auf den Knoten ausgeführt und die Ausgabe der Knoten angezeigt.
Da Sie sich jetzt mit den wichtigsten Konzepten des Batch-Diensts vertraut gemacht haben, können Sie Batch mit realistischeren, umfangreicheren Workloads verwenden. Um mehr über Azure Batch zu erfahren und eine parallele Workload mit einer realen Anwendung zu durchlaufen, fahren Sie mit dem Batch Python-Lernprogramm fort.