Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Genera dati di test utilizzando un job AWS Glue e Python
Creato da Moinul Al-Mamun (AWS)
Riepilogo
Questo modello mostra come generare in modo rapido e semplice milioni di file di esempio contemporaneamente creando un job AWS Glue scritto in Python. I file di esempio sono archiviati in un bucket Amazon Simple Storage Service (Amazon S3). La capacità di generare rapidamente un gran numero di file di esempio è importante per testare o valutare i servizi nel cloud AWS. Ad esempio, puoi testare le prestazioni dei DataBrew job AWS Glue Studio o AWS Glue eseguendo l'analisi dei dati su milioni di file di piccole dimensioni in un prefisso Amazon S3.
Sebbene sia possibile utilizzare altri servizi AWS per generare set di dati di esempio, consigliamo di utilizzare AWS Glue. Non è necessario gestire alcuna infrastruttura perché AWS Glue è un servizio di elaborazione dati senza server. Basta importare il codice ed eseguirlo in un cluster AWS Glue. Inoltre, AWS Glue fornisce, configura e ridimensiona le risorse necessarie per eseguire i tuoi lavori. Paghi solo per le risorse che le tue attività utilizzano durante l'esecuzione.
Prerequisiti e limitazioni
Prerequisiti
Versioni del prodotto
Python 3.9
AWS CLI versione 2
Limitazioni
Il numero massimo di lavori AWS Glue per trigger è 50. Per ulteriori informazioni, consulta gli endpoint e le quote di AWS Glue.
Architettura
Il diagramma seguente mostra un'architettura di esempio incentrata su un job AWS Glue che scrive il suo output (ovvero file di esempio) in un bucket S3.

Il diagramma include il seguente flusso di lavoro:
Utilizzi l'AWS CLI, la Console di gestione AWS o un'API per avviare il job AWS Glue. L'API o la CLI di AWS consentono di automatizzare la parallelizzazione del job richiamato e di ridurre il tempo di esecuzione per la generazione di file di esempio.
Il job AWS Glue genera il contenuto dei file in modo casuale, lo converte in formato CSV e quindi lo archivia come oggetto Amazon S3 con un prefisso comune. Ogni file è inferiore a un kilobyte. Il job AWS Glue accetta due parametri di lavoro definiti dall'utente:
START_RANGE
eEND_RANGE
. È possibile utilizzare questi parametri per impostare i nomi dei file e il numero di file generati in Amazon S3 da ogni processo eseguito. È possibile eseguire più istanze di questo processo in parallelo (ad esempio, 100 istanze).
Strumenti
Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
AWS Command Line Interface (AWS CLI) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.
AWS Glue è un servizio di estrazione, trasformazione e caricamento (ETL) completamente gestito. Ti aiuta a classificare, pulire, arricchire e spostare i dati in modo affidabile tra archivi di dati e flussi di dati.
AWS Identity and Access Management (IAM) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
Best practice
Prendi in considerazione le seguenti best practice di AWS Glue durante l'implementazione di questo modello:
Usa il tipo di lavoratore AWS Glue giusto per ridurre i costi. Ti consigliamo di comprendere le diverse proprietà dei tipi di worker e quindi di scegliere il tipo di worker giusto per il tuo carico di lavoro in base ai requisiti di CPU e memoria. Per questo modello, si consiglia di utilizzare un job shell Python come tipo di lavoro per ridurre al minimo la DPU e ridurre i costi. Per ulteriori informazioni, consulta Aggiungere lavori in AWS Glue nella AWS Glue Developer Guide.
Usa il giusto limite di concorrenza per scalare il tuo lavoro. Ti consigliamo di basare la massima contemporaneità del tuo lavoro AWS Glue sul tempo richiesto e sul numero di file richiesto.
Inizia a generare un numero limitato di file all'inizio. Per ridurre i costi e risparmiare tempo durante la creazione dei job AWS Glue, inizia con un numero limitato di file (ad esempio 1.000). Questo può semplificare la risoluzione dei problemi. Se la generazione di un numero ridotto di file ha esito positivo, è possibile passare a un numero maggiore di file.
Esegui prima localmente. Per ridurre i costi e risparmiare tempo nella creazione dei job AWS Glue, avvia lo sviluppo localmente e testa il codice. Per istruzioni sulla configurazione di un contenitore Docker che può aiutarti a scrivere lavori di estrazione, trasformazione e caricamento (ETL) di AWS Glue sia in una shell che in un ambiente di sviluppo integrato (IDE), consulta il post Developing AWS Glue ETL Developing AWS Glue localmente usando un container
sul blog di AWS Big Data.
Per ulteriori best practice di AWS Glue, consulta Best practice nella documentazione di AWS Glue.
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea un bucket S3 per archiviare i file. | Crea un bucket S3 e un prefisso al suo interno. NotaQuesto modello utilizza la | Sviluppatore di app |
Crea e configura un ruolo IAM. | È necessario creare un ruolo IAM che il job AWS Glue possa utilizzare per scrivere nel bucket S3.
| Sviluppatore di app |
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea un job AWS Glue. | Devi creare un job AWS Glue che generi i tuoi contenuti e li memorizzi in un bucket S3. Crea un lavoro AWS Glue, quindi configura il tuo lavoro completando i seguenti passaggi:
| Sviluppatore di app |
Aggiorna il codice del lavoro. |
| Sviluppatore di app |
Attività | Descrizione | Competenze richieste |
---|---|---|
Esegui il job AWS Glue dalla riga di comando. | Per eseguire il tuo job AWS Glue dalla CLI di AWS, esegui il comando seguente utilizzando i tuoi valori:
NotaPer istruzioni sull'esecuzione del job AWS Glue dalla Console di gestione AWS, consulta la storia Run the AWS Glue nella Console di gestione AWS in questo modello. SuggerimentoTi consigliamo di utilizzare l'AWS CLI per eseguire i job AWS Glue se desideri eseguire più esecuzioni contemporaneamente con parametri diversi, come mostrato nell'esempio precedente. Per generare tutti i comandi AWS CLI necessari per generare un numero definito di file utilizzando un determinato fattore di parallelizzazione, esegui il seguente codice bash (utilizzando i tuoi valori):
Se usi lo script precedente, considera quanto segue:
NotaPer vedere un esempio di output dello script precedente, vedete l'output dello script Shell nella sezione Informazioni aggiuntive di questo modello. | Sviluppatore di app |
Esegui il job AWS Glue nella Console di gestione AWS. |
| Sviluppatore di app |
Verifica lo stato del tuo lavoro con AWS Glue. |
| Sviluppatore di app |
Risorse correlate
Riferimenti
Guide e pattern
Informazioni aggiuntive
Test di benchmarking
Questo modello è stato utilizzato per generare 10 milioni di file utilizzando diversi parametri di parallelizzazione come parte di un test di benchmarking. La tabella seguente mostra i risultati del test:
Parallelizzazione | Numero di file generati dall'esecuzione di un processo | Durata del lavoro | Velocità |
10 | 1.000.000 | 6 ore, 40 minuti | Molto lento |
50 | 200.000 | 80 minuti | Moderata |
100 | 100.000 | 40 minuti | Veloce |
Se desideri velocizzare il processo, puoi configurare più esecuzioni simultanee nella configurazione del processo. Puoi facilmente modificare la configurazione del lavoro in base ai tuoi requisiti, ma tieni presente che esiste un limite di quota del servizio AWS Glue. Per ulteriori informazioni, consulta gli endpoint e le quote di AWS Glue.
Output dello script Shell
L'esempio seguente mostra l'output dello script di shell dal job Run the AWS Glue dalla riga di comando in questo modello.
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 ~
DOMANDE FREQUENTI
Quante esecuzioni simultanee o job paralleli devo usare?
Il numero di esecuzioni simultanee e di lavori paralleli dipende dal tempo richiesto e dal numero desiderato di file di test. Ti consigliamo di controllare la dimensione dei file che stai creando. Innanzitutto, controlla quanto tempo impiega un job AWS Glue per generare il numero di file desiderato. Quindi, usa il numero giusto di esecuzioni simultanee per raggiungere i tuoi obiettivi. Ad esempio, se presumi che 100.000 file impieghino 40 minuti per completare l'esecuzione ma il tempo previsto sia di 30 minuti, devi aumentare l'impostazione di concorrenza per il tuo job AWS Glue.
Che tipo di contenuto posso creare utilizzando questo modello?
È possibile creare qualsiasi tipo di contenuto, ad esempio file di testo con delimitatori diversi (ad esempio, PIPE, JSON o CSV). Questo modello utilizza Boto3 per scrivere su un file e quindi salva il file in un bucket S3.
Di quale livello di autorizzazione IAM ho bisogno nel bucket S3?
È necessario disporre di una policy basata sull'identità che consenta Write
l'accesso agli oggetti nel bucket S3. Per ulteriori informazioni, consulta Amazon S3: consente l'accesso in lettura e scrittura agli oggetti in un bucket S3 nella documentazione di Amazon S3.