Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Generieren Sie Testdaten mit einem AWS Glue-Job und Python
Erstellt von Moinul Al-Mamun () AWS
Umwelt: Produktion | Technologien: Analytik CloudNative; Datenseen; Serverlos DevelopmentAndTesting; Große Datenmengen | AWSDienste: AWS Glue; Amazon S3 |
Übersicht
Dieses Muster zeigt Ihnen, wie Sie schnell und einfach Millionen von Beispieldateien gleichzeitig generieren können, indem Sie einen in Python geschriebenen AWS Glue-Job erstellen. Die Beispieldateien werden in einem Amazon Simple Storage Service (Amazon S3) -Bucket gespeichert. Die Fähigkeit, schnell eine große Anzahl von Beispieldateien zu generieren, ist wichtig für das Testen oder Evaluieren von Diensten in der AWS Cloud. Sie können beispielsweise die Leistung von AWS Glue Studio- oder AWS DataBrew Glue-Jobs testen, indem Sie Datenanalysen für Millionen kleiner Dateien in einem Amazon S3 S3-Präfix durchführen.
Sie können zwar andere AWS Dienste verwenden, um Beispieldatensätze zu generieren, wir empfehlen jedoch, AWS Glue zu verwenden. Sie müssen keine Infrastruktur verwalten, da AWS Glue ein serverloser Datenverarbeitungsdienst ist. Sie können einfach Ihren Code mitbringen und ihn in einem AWS Glue-Cluster ausführen. Darüber hinaus stellt AWS Glue die Ressourcen bereit, konfiguriert und skaliert sie, die für die Ausführung Ihrer Jobs erforderlich sind. Sie zahlen nur für die Ressourcen, die Ihre Jobs während der Ausführung verbrauchen.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktives AWS Konto
AWSBefehlszeilenschnittstelle (AWSCLI), installiert und konfiguriert, um mit dem AWS Konto zu arbeiten
Versionen der Produkte
Python 3.9
AWSCLIVersion 2
Einschränkungen
Die maximale Anzahl von AWS Glue-Jobs pro Trigger ist 50. Weitere Informationen finden Sie unter AWSGlue-Endpunkte und Kontingente.
Architektur
Das folgende Diagramm zeigt eine Beispielarchitektur, in deren Mittelpunkt ein AWS Glue-Job steht, der seine Ausgabe (d. h. Beispieldateien) in einen S3-Bucket schreibt.
Das Diagramm umfasst den folgenden Arbeitsablauf:
Sie verwenden die AWS CLI AWS Management Console oder an, API um den AWS Glue-Job zu initiieren. APIMit AWS CLI oder können Sie die Parallelisierung des aufgerufenen Jobs automatisieren und die Laufzeit für die Generierung von Beispieldateien reduzieren.
Der AWS Glue-Job generiert Dateiinhalte nach dem Zufallsprinzip, konvertiert den Inhalt in ein CSV Format und speichert den Inhalt dann als Amazon S3 S3-Objekt unter einem gemeinsamen Präfix. Jede Datei ist kleiner als ein Kilobyte. Der AWS Glue-Job akzeptiert zwei benutzerdefinierte Auftragsparameter:
START_RANGE
undEND_RANGE
. Sie können diese Parameter verwenden, um Dateinamen und die Anzahl der Dateien festzulegen, die in Amazon S3 bei jeder Auftragsausführung generiert werden. Sie können mehrere Instanzen dieses Jobs parallel ausführen (z. B. 100 Instanzen).
Tools
Amazon Simple Storage Service (Amazon S3) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.
AWSCommand Line Interface (AWSCLI) ist ein Open-Source-Tool, mit dem Sie mithilfe von Befehlen in Ihrer Befehlszeilen-Shell mit AWS Diensten interagieren können.
AWSGlue ist ein vollständig verwalteter Dienst zum Extrahieren, Transformieren und Laden (ETL). Er hilft Ihnen dabei, Daten zuverlässig zu kategorisieren, zu bereinigen, anzureichern und zwischen Datenspeichern und Datenströmen zu verschieben.
AWSMit Identity and Access Management (IAM) können Sie den Zugriff auf Ihre AWS Ressourcen sicher verwalten, indem Sie kontrollieren, wer authentifiziert und autorisiert ist, diese zu verwenden.
Bewährte Methoden
Beachten Sie bei der Implementierung dieses Musters die folgenden Best Practices für AWS Glue:
Verwenden Sie den richtigen AWS Kleberarbeitertyp, um die Kosten zu senken. Wir empfehlen Ihnen, sich mit den verschiedenen Eigenschaften von Workertypen vertraut zu machen und dann anhand CPU der Speicheranforderungen den richtigen Workertyp für Ihre Arbeitslast auszuwählen. Für dieses Muster empfehlen wir, einen Python-Shell-Job als Jobtyp zu verwenden, um die Kosten zu minimieren DPU und zu reduzieren. Weitere Informationen finden Sie unter Hinzufügen von Jobs in AWS Glue im AWS Glue Developer Guide.
Verwenden Sie das richtige Parallelitätslimit, um Ihren Job zu skalieren. Wir empfehlen Ihnen, die maximale Parallelität Ihres AWS Glue-Jobs von Ihrem Zeitbedarf und der benötigten Anzahl von Dateien abhängig zu machen.
Generieren Sie zunächst eine kleine Anzahl von Dateien. Um Kosten und Zeit beim Erstellen Ihrer AWS Glue-Jobs zu sparen, beginnen Sie mit einer kleinen Anzahl von Dateien (z. B. 1.000). Dies kann die Fehlerbehebung erleichtern. Wenn das Generieren einer kleinen Anzahl von Dateien erfolgreich ist, können Sie auf eine größere Anzahl von Dateien skalieren.
Führen Sie es zuerst lokal aus. Um Kosten zu senken und Zeit beim Erstellen Ihrer AWS Glue-Jobs zu sparen, starten Sie die Entwicklung lokal und testen Sie Ihren Code. Anweisungen zum Einrichten eines Docker-Containers, mit dem Sie AWS Glue-Jobs zum Extrahieren, Transformieren und Laden (ETL) sowohl in einer Shell als auch in einer integrierten Entwicklungsumgebung (IDE) schreiben können, finden Sie im Beitrag Developing AWS ETL Glue-Jobs lokal mithilfe eines Containers
im AWS Big Data-Blog.
Weitere Best Practices für AWS Glue finden Sie unter Best Practices in der AWS Glue-Dokumentation.
Epen
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie einen S3-Bucket zum Speichern der Dateien. | Erstellen Sie einen S3-Bucket und ein darin enthaltenes Präfix. Hinweis: In diesem Muster wird der | App-Developer |
Erstellen und konfigurieren Sie eine IAM Rolle. | Sie müssen eine IAM Rolle erstellen, die Ihr AWS Glue-Job verwenden kann, um in Ihren S3-Bucket zu schreiben.
| App-Developer |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie einen AWS Glue-Job. | Sie müssen einen AWS Glue-Job erstellen, der Ihre Inhalte generiert und in einem S3-Bucket speichert. Erstellen Sie einen AWSGlue-Job und konfigurieren Sie dann Ihren Job, indem Sie die folgenden Schritte ausführen:
| App-Developer |
Aktualisieren Sie den Jobcode. |
| App-Developer |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Führen Sie den AWS Glue-Job von der Befehlszeile aus. | Um Ihren AWS Glue-Job vom auszuführen AWSCLI, führen Sie den folgenden Befehl mit Ihren Werten aus:
Hinweis: Anweisungen zum Ausführen des AWS Glue-Jobs von der AWS Management Console aus finden Sie in der Geschichte Run the AWS Glue-Job in der AWS Management Console in diesem Muster. Tipp: Wir empfehlen die Verwendung von AWSCLI, um AWS Glue-Jobs auszuführen, wenn Sie mehrere Ausführungen gleichzeitig mit unterschiedlichen Parametern ausführen möchten, wie im obigen Beispiel gezeigt. Um alle AWS CLI Befehle zu generieren, die zum Generieren einer definierten Anzahl von Dateien unter Verwendung eines bestimmten Parallelisierungsfaktors erforderlich sind, führen Sie den folgenden Bash-Code aus (unter Verwendung Ihrer Werte):
Wenn Sie das obige Skript verwenden, sollten Sie Folgendes beachten:
Hinweis: Ein Beispiel für die Ausgabe des obigen Skripts finden Sie unter Shell-Skriptausgabe im Abschnitt Zusätzliche Informationen dieses Musters. | App-Developer |
Führen Sie den AWS Glue-Job in der AWS Management Console aus. |
| App-Developer |
Überprüfen Sie den Status Ihres AWS Glue-Jobs. |
| App-Developer |
Zugehörige Ressourcen
Referenzen
Anleitungen und Muster
Zusätzliche Informationen
Benchmarking-Test
Dieses Muster wurde verwendet, um im Rahmen eines Benchmark-Tests 10 Millionen Dateien mit unterschiedlichen Parallelisierungsparametern zu generieren. Die folgende Tabelle zeigt die Ergebnisse des Tests:
Parallelisierung | Anzahl der Dateien, die durch einen Joblauf generiert wurden | Dauer des Job | Geschwindigkeit |
10 | 1 000 000 | 6 Stunden, 40 Minuten | Sehr langsam |
50 | 200 000 | 80 Minuten | Mittel |
100 | 100 000 | 40 Minuten | Schnell |
Wenn Sie den Prozess beschleunigen möchten, können Sie in Ihrer Jobkonfiguration mehr gleichzeitige Läufe konfigurieren. Sie können die Jobkonfiguration ganz einfach an Ihre Anforderungen anpassen. Beachten Sie jedoch, dass es eine Quotenbeschränkung für den AWS Glue-Service gibt. Weitere Informationen finden Sie unter AWSGlue-Endpunkte und Kontingente.
Shell-Skriptausgabe
Das folgende Beispiel zeigt die Ausgabe des Shell-Skripts aus dem Job Run the AWS Glue über die Befehlszeile in diesem Muster.
user@MUC-1234567890 MINGW64 ~ $ # define parameters NUMBER_OF_FILES=10000000; PARALLELIZATION=50; # initialize _SB=0; # generate commands for i in $(seq 1 $PARALLELIZATION); do echo aws glue start-job-run --job-name create_small_files --arguments "'"'{"--START_RANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION) (i-1) + SB))'","--ENDRANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION) (i)))'"}'"'"; _SB=1; done aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"0","--END_RANGE":"200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"200001","--END_RANGE":"400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"400001","--END_RANGE":"600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"600001","--END_RANGE":"800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"800001","--END_RANGE":"1000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1000001","--END_RANGE":"1200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1200001","--END_RANGE":"1400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1400001","--END_RANGE":"1600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1600001","--END_RANGE":"1800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1800001","--END_RANGE":"2000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2000001","--END_RANGE":"2200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2200001","--END_RANGE":"2400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2400001","--END_RANGE":"2600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2600001","--END_RANGE":"2800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2800001","--END_RANGE":"3000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3000001","--END_RANGE":"3200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3200001","--END_RANGE":"3400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3400001","--END_RANGE":"3600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3600001","--END_RANGE":"3800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3800001","--END_RANGE":"4000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4000001","--END_RANGE":"4200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4200001","--END_RANGE":"4400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4400001","--END_RANGE":"4600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4600001","--END_RANGE":"4800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4800001","--END_RANGE":"5000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5000001","--END_RANGE":"5200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5200001","--END_RANGE":"5400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5400001","--END_RANGE":"5600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5600001","--END_RANGE":"5800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5800001","--END_RANGE":"6000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6000001","--END_RANGE":"6200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6200001","--END_RANGE":"6400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6400001","--END_RANGE":"6600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6600001","--END_RANGE":"6800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6800001","--END_RANGE":"7000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7000001","--END_RANGE":"7200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7200001","--END_RANGE":"7400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7400001","--END_RANGE":"7600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7600001","--END_RANGE":"7800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7800001","--END_RANGE":"8000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8000001","--END_RANGE":"8200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8200001","--END_RANGE":"8400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8400001","--END_RANGE":"8600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8600001","--END_RANGE":"8800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8800001","--END_RANGE":"9000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9000001","--END_RANGE":"9200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9200001","--END_RANGE":"9400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9400001","--END_RANGE":"9600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9600001","--END_RANGE":"9800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9800001","--END_RANGE":"10000000"}' user@MUC-1234567890 MINGW64 ~
FAQ
Wie viele gleichzeitige Läufe oder parallel Jobs sollte ich verwenden?
Die Anzahl der gleichzeitigen Läufe und parallel Jobs hängt von Ihrem Zeitbedarf und der gewünschten Anzahl von Testdateien ab. Wir empfehlen Ihnen, die Größe der Dateien, die Sie erstellen, zu überprüfen. Prüfen Sie zunächst, wie viel Zeit ein AWS Glue-Job benötigt, um die gewünschte Anzahl von Dateien zu generieren. Verwenden Sie dann die richtige Anzahl gleichzeitiger Läufe, um Ihre Ziele zu erreichen. Wenn Sie beispielsweise davon ausgehen, dass 100.000 Dateien 40 Minuten benötigen, um den Lauf abzuschließen, Ihre Zielzeit jedoch 30 Minuten beträgt, müssen Sie die Parallelitätseinstellung für Ihren AWS Glue-Job erhöhen.
Welche Art von Inhalt kann ich mit diesem Muster erstellen?
Sie können jede Art von Inhalt erstellen, z. B. Textdateien mit unterschiedlichen Trennzeichen (z. B. PIPEJSON, oderCSV). Dieses Muster verwendet Boto3, um in eine Datei zu schreiben, und speichert die Datei dann in einem S3-Bucket.
Welche IAM Berechtigungsstufe benötige ich für den S3-Bucket?
Sie benötigen eine identitätsbasierte Richtlinie, die den Write
Zugriff auf Objekte in Ihrem S3-Bucket ermöglicht. Weitere Informationen finden Sie unter Amazon S3: Erlaubt Lese- und Schreibzugriff auf Objekte in einem S3-Bucket in der Amazon S3 S3-Dokumentation.