Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Ein Azure Batch-Auftrag erfordert häufig ein Setup, bevor seine Aufgaben ausgeführt werden, und die Wartung nach dem Auftrag, wenn seine Aufgaben abgeschlossen sind. Beispielsweise müssen Sie allgemeine Aufgabeneingabedaten auf Ihre Computeknoten herunterladen oder Aufgabenausgabedaten nach Abschluss des Auftrags in Azure Storage hochladen. Sie können Aufgaben zur Auftragsvorbereitung und Aufgaben zur Auftragsfreigabe für diese Vorgänge verwenden.
- Bevor die Aufgaben eines Auftrags ausgeführt werden, wird die Aufgabe zum Vorbereiten von Aufträgen auf allen Compute-Knoten ausgeführt, für die die Ausführung von mindestens einer Aufgabe geplant ist.
- Nach Abschluss des Auftrags wird die Aufgabe zum Freigeben von Aufträgen auf jedem Knoten im Pool ausgeführt, der eine Aufgabe zur Auftragsvorbereitung ausgeführt hat.
Wie bei anderen Batchaufgaben können Sie eine Befehlszeile angeben, die aufgerufen werden soll, wenn eine Jobvorbereitungs- oder Freigabeaufgabe ausgeführt wird. Bei der Vorbereitung und Freigabe von Aufgaben stehen Ihnen vertraute Funktionen von Batchaufgaben zur Verfügung, wie:
- Download der Ressourcendatei.
- Ausführung mit erhöhten Rechten.
- Benutzerdefinierte Umgebungsvariablen.
- Maximale Ausführungsdauer.
- Wiederholungsanzahl.
- Dateiaufbewahrungszeit.
In diesem Artikel wird gezeigt, wie Sie die Klassen JobPreparationTask und JobReleaseTask in der Batch-.NET-Bibliothek verwenden.
Tipp
Aufgaben zum Vorbereiten und Freigeben von Aufträgen sind insbesondere in Umgebungen mit einem gemeinsam genutzten Pool hilfreich, in denen ein Pool mit Compute-Knoten zwischen Auftragsausführungen beibehalten und von vielen verschiedenen Aufträgen genutzt wird.
Anwendungsfälle für die Auftragsvorbereitung und Freigabe von Aufgaben
Aufgaben zur Auftragsvorbereitung und Auftragsfreigabe eignen sich gut für die folgenden Szenarien:
Laden Sie allgemeine Aufgabendaten herunter. Batchaufträge erfordern häufig eine gemeinsame Datenmenge als Eingabe für die Aufgaben eines Auftrags. Sie können eine Auftragsvorbereitungsaufgabe verwenden, um diese Daten vor der Ausführung der anderen Aufgaben des Auftrags auf jeden Knoten herunterzuladen.
In täglichen Risikoanalyseberechnungen sind Marktdaten z. B. jobspezifisch, aber für alle Aufgaben im Job üblich. Sie können eine Auftragsvorbereitungsaufgabe verwenden, um diese Marktdaten, die oft mehrere Gigabyte groß sind, auf jeden Computeknoten herunterzuladen, damit jede Aufgabe, die auf dem Knoten ausgeführt wird, diese verwenden kann.
Auftrags- und Vorgangsausgabe löschen. In einer Umgebung mit einem gemeinsam genutzten Pool, in der die Compute-Knoten eines Pools zwischen Aufträgen nicht außer Betrieb genommen werden, müssen Sie Auftragsdaten zwischen den Ausführungen unter Umständen löschen. Beispielsweise müssen Sie Speicherplatz auf den Nodes sparen oder die Sicherheitsrichtlinien Ihrer Organisation erfüllen. Sie können eine Auftragsfreigabeaufgabe verwenden, um Daten zu löschen, die von einer Auftragsvorbereitungsaufgabe heruntergeladen oder durch die Ausführung dieser Aufgabe generiert wurden.
Bewahren Sie Protokolle auf. Möglicherweise möchten Sie eine Kopie von Protokolldateien beibehalten, die Ihre Aufgaben generieren, oder von Absturzdateien, die fehlerhafte Anwendungen generieren. Sie können eine Auftragsfreigabeaufgabe verwenden, um diese Daten in ein Azure Storage-Konto zu komprimieren und hochzuladen.
Auftragsvorbereitungsaufgabe
Bevor die Auftragsaufgaben ausgeführt werden, führt Batch die Vorbereitungsaufgabe auf jedem Rechenknoten aus, der für die Ausführung einer Aufgabe eingeplant ist. Standardmäßig wartet Batch darauf, dass die Auftragsvorbereitungsaufgabe abgeschlossen ist, bevor geplante Auftragsaufgaben ausgeführt werden. Sie können es jedoch so konfigurieren, dass es nicht wartet.
Wenn der Knoten neu gestartet wird, wird die Auftragsvorbereitungsaufgabe erneut ausgeführt, Sie können dieses Verhalten aber auch deaktivieren. Wenn Sie einen Auftrag mit einem Auftragsvorbereitungsvorgang und einer Aufgabe des Auftragsmanagers haben, wird der Aufgabenvorbereitungsvorgang vor der Aufgabe des Auftragsmanagers und vor allen anderen Aufgaben ausgeführt. Der Auftragsvorbereitungsvorgang wird immer zuerst ausgeführt.
Die Aufgabe zum Vorbereiten von Aufträgen wird nur auf Knoten ausgeführt, für die die Ausführung einer Aufgabe geplant ist. Dieses Verhalten verhindert unnötige Ausführungen auf Knoten, denen keine Aufgaben zugewiesen sind. Knoten werden möglicherweise keine Aufgaben zugewiesen, wenn die Anzahl der Auftragsaufgaben kleiner als die Anzahl der Knoten im Pool ist. Dieses Verhalten gilt auch, wenn die gleichzeitige Aufgabenausführung aktiviert ist, wodurch einige Knoten im Leerlauf bleiben, wenn die Vorgangsanzahl niedriger als die gesamt möglichen gleichzeitigen Vorgänge ist.
Hinweis
JobPreparationTask unterscheidet sich von CloudPool.StartTask dadurch, dass JobPreparationTask am Anfang jedes Auftrags ausgeführt wird, während StartTask nur ausgeführt wird, wenn ein Computeknoten zuerst einem Pool beitritt oder neu gestartet wird.
Auftragsfreigabeaufgabe
Nachdem Sie einen Auftrag als abgeschlossen gekennzeichnet haben, wird die Freigabeaufgabe auf jedem Knoten im Pool ausgeführt, auf dem eine Auftragsvorbereitungsaufgabe ausgeführt wurde. Sie markieren einen Auftrag als abgeschlossen, indem Sie eine Beendigungsanforderung ausgeben. Diese Anforderung legt den Auftragsstatus auf das Beenden fest, beendet alle aktiven oder ausgeführten Aufgaben, die dem Auftrag zugeordnet sind, und führt die Auftragsfreigabeaufgabe aus. Der Job wechselt dann zum abgeschlossenen Zustand.
Hinweis
Durch das Löschen eines Auftrags wird auch die Auftragsfreigabeaufgabe ausgeführt. Wenn ein Auftrag jedoch bereits beendet wurde, wird die Freigabeaufgabe nicht ein zweites Mal ausgeführt, wenn der Auftrag später gelöscht wird.
Auftragsfreigabeaufgaben können maximal 15 Minuten ausgeführt werden, bevor der Batchdienst sie beendet. Weitere Informationen finden Sie in der REST-API-Referenzdokumentation.
Auftragsvorbereitung und Freigabeaufgaben mit Batch .NET
Um eine Auftragsvorbereitungsaufgabe auszuführen, weisen Sie der CloudJob.JobPreparationTask-Eigenschaft Ihres Auftrags ein JobPreparationTask-Objekt zu. Auf ähnliche Weise initialisieren Sie einen JobReleaseTask und weisen ihn dem CloudJob.JobReleaseTask Ihres Auftrags zu, um den Freigabetask des Auftrags zu verwenden.
Im folgenden Codeausschnitt myBatchClient handelt es sich um eine Instanz von BatchClient und myPool ist ein vorhandener Pool innerhalb des Batchkontos.
// Create the CloudJob for CloudPool "myPool"
CloudJob myJob =
myBatchClient.JobOperations.CreateJob(
"JobPrepReleaseSampleJob",
new PoolInformation() { PoolId = "myPool" });
// Specify the command lines for the job preparation and release tasks
string jobPrepCmdLine =
"cmd /c echo %AZ_BATCH_NODE_ID% > %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";
string jobReleaseCmdLine =
"cmd /c del %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";
// Assign the job preparation task to the job
myJob.JobPreparationTask =
new JobPreparationTask { CommandLine = jobPrepCmdLine };
// Assign the job release task to the job
myJob.JobReleaseTask =
new JobReleaseTask { CommandLine = jobReleaseCmdLine };
await myJob.CommitAsync();
Die Auftragsfreigabeaufgabe wird ausgeführt, wenn ein Auftrag beendet oder gelöscht wird. Sie beenden einen Auftrag mithilfe von JobOperations.TerminateJobAsync und löschen einen Auftrag mithilfe von JobOperations.DeleteJobAsync. Normalerweise beenden oder löschen Sie einen Auftrag, wenn seine Aufgaben abgeschlossen sind oder wenn ein von Ihnen definiertes Timeout erreicht ist.
// Terminate the job to mark it as completed. Terminate initiates the
// job release task on any node that ran job tasks. Note that the
// job release task also runs when a job is deleted, so you don't
// have to call Terminate if you delete jobs after task completion.
await myBatchClient.JobOperations.TerminateJobAsync("JobPrepReleaseSampleJob");
Codebeispiel auf GitHub
Um Aufgabenvorbereitung anzuzeigen und Aufgaben in Aktion zu veröffentlichen, erstellen Sie das JobPrepRelease-Beispielprojekt von GitHub, und führen Sie es aus. Diese Konsolenanwendung führt die folgenden Aktionen aus:
- Erstellt einen Pool mit zwei Knoten.
- Erstellt eine Aufgabe mit Aufgabenvorbereitung, Freigabe und Standardaufgaben.
- Führt die Auftragsvorbereitungsaufgabe aus, die zunächst die Knoten-ID in eine Textdatei im freigegebenen Verzeichnis eines Knotens schreibt.
- Führt eine Aufgabe auf jedem Knoten aus, der seine Aufgaben-ID in dieselbe Textdatei schreibt.
- Nach dem Abschluss aller Aufgaben oder Erreichen der Zeitüberschreitung gibt sie den Inhalt der Textdatei jedes Knotens an die Konsole aus.
- Sie führt die Aufgabe zum Freigeben von Aufträgen aus, um die Datei aus dem Knoten zu löschen, wenn der Auftrag abgeschlossen ist.
- Druckt die Exit-Codes der Auftragsvorbereitungs- und Freigabeaufgaben für jeden Knoten aus, auf dem sie ausgeführt wurden.
- Sie hält die Ausführung an, um auf die Löschbestätigung für den Auftrag und/oder den Pool zu warten.
Die Ausgabe der Beispielanwendung sieht in etwa wie das folgende Beispiel aus:
Attempting to create pool: JobPrepReleaseSamplePool
Created pool JobPrepReleaseSamplePool with 2 nodes
Checking for existing job JobPrepReleaseSampleJob...
Job JobPrepReleaseSampleJob not found, creating...
Submitting tasks and awaiting completion...
All tasks completed.
Contents of shared\job_prep_and_release.txt on tvm-2434664350_1-20160623t173951z:
-------------------------------------------
tvm-2434664350_1-20160623t173951z tasks:
task001
task004
task005
task006
Contents of shared\job_prep_and_release.txt on tvm-2434664350_2-20160623t173951z:
-------------------------------------------
tvm-2434664350_2-20160623t173951z tasks:
task008
task002
task003
task007
Waiting for job JobPrepReleaseSampleJob to reach state Completed
...
tvm-2434664350_1-20160623t173951z:
Prep task exit code: 0
Release task exit code: 0
tvm-2434664350_2-20160623t173951z:
Prep task exit code: 0
Release task exit code: 0
Delete job? [yes] no
yes
Delete pool? [yes] no
yes
Sample complete, hit ENTER to exit...
Hinweis
Die unterschiedlichen Erstellungs- und Startzeiten von Knoten in einem neuen Pool bedeuten, dass einige Knoten für Aufgaben bereit sind, bevor andere es sind, sodass möglicherweise unterschiedliche Ergebnisse angezeigt werden. Aufgrund der schnellen Ausführung der Aufgaben werden unter Umständen alle Aufgaben des Auftrags von einem einzelnen Knoten des Pools ausgeführt. In diesem Fall sind die Aufgaben zum Vorbereiten und Freigeben von Aufträgen für den Knoten, der keine Aufgaben ausgeführt hat, nicht vorhanden.
Anzeigen von Aufgabenvorbereitung und Freigabeaufgaben im Azure-Portal
Sie können das Azure-Portal verwenden, um Batchauftragseigenschaften und -aufgaben anzuzeigen, einschließlich der Auftragsvorbereitung und freigabeaufgaben. Wählen Sie auf der Seite "Batchkonto" die Option "Aufträge " aus der linken Navigation aus, und wählen Sie dann einen Auftrag aus. Wenn Sie die Beispielanwendung ausführen, navigieren Sie nach Abschluss der Aufgaben zur Auftragsseite, aber bevor Sie den Auftrag und den Pool löschen.
Sie können den Fortschritt und Status des Auftrags überwachen, indem Sie die Ungefähre Anzahl der Aufgaben auf der Seite Auftragsübersicht oder Aufgaben erweitern.
Der folgende Screenshot zeigt die Seite "JobPrepReleaseSampleJob ", nachdem die Beispielanwendung ausgeführt wurde. Dieser Auftrag hatte Vorbereitungs- und Freigabeaufgaben, sodass Sie Vorbereitungsaufgaben oder Freigabeaufgaben in der linken Navigation auswählen können, um deren Eigenschaften anzuzeigen.
Nächste Schritte
- Erfahren Sie mehr über die Fehlerprüfung für Aufträge und Aufgaben.
- Erfahren Sie, wie Sie Anwendungspakete verwenden, um Batch-Computeknoten für die Aufgabenausführung vorzubereiten.
- Erkunden Sie verschiedene Möglichkeiten zum Kopieren von Daten und Anwendungen in Batch-Computeknoten.
- Erfahren Sie mehr über die Verwendung der Azure Batch File Conventions-Bibliothek zum Speichern von Protokollen und anderen Auftrags- und Aufgabenausgabedaten.