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 usando un lavoro AWS Glue e Python
Creato da Moinul Al-Mamun () AWS
Ambiente: produzione | Tecnologie: analisi CloudNative; data lake DevelopmentAndTesting; serverless; Big data | AWSservizi: AWS Glue; Amazon S3 |
Riepilogo
Questo modello mostra come generare in modo rapido e semplice milioni di file di esempio contemporaneamente creando un lavoro 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 AWS servizi per generare set di dati di esempio, si consiglia di utilizzare AWS Glue. Non è necessario gestire alcuna infrastruttura perché AWS Glue è un servizio di elaborazione dati senza server. Puoi semplicemente portare il tuo codice ed eseguirlo in un cluster AWS Glue. Inoltre, AWS Glue fornisce, configura e ridimensiona le risorse necessarie per eseguire i lavori. Paghi solo per le risorse che i tuoi job utilizzano durante l'esecuzione.
Prerequisiti e limitazioni
Prerequisiti
Un AWS account attivo
AWSCommand Line Interface (AWSCLI), installata e configurata per funzionare con l'AWSaccount
Versioni del prodotto
Python 3.9
AWSCLIversione 2
Limitazioni
Il numero massimo di lavori AWS Glue per trigger è 50. Per ulteriori informazioni, consulta AWSGlue endpoints and quotas.
Architettura
Il diagramma seguente illustra un'architettura di esempio incentrata su un lavoro AWS Glue che scrive il relativo output (ovvero file di esempio) in un bucket S3.
Il diagramma include il seguente flusso di lavoro:
Si utilizza AWS Management Console o un API per avviare il job AWS Glue. AWS CLI L'AWSCLIor API consente di automatizzare la parallelizzazione del job richiamato e di ridurre il tempo di esecuzione per la generazione di file di esempio.
Il processo AWS Glue genera il contenuto del file in modo casuale, lo converte in CSV formato e quindi lo archivia come oggetto Amazon S3 con un prefisso comune. Ogni file è inferiore a un kilobyte. Il lavoro 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.
AWSCommand Line Interface (AWSCLI) è uno strumento open source che consente di interagire con i AWS servizi tramite comandi nella shell della riga di comando.
AWSGlue è 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.
AWSIdentity and Access Management (IAM) consente di gestire in modo sicuro l'accesso alle AWS risorse 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 AWS Glue worker 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 CPU base ai requisiti di memoria. Per questo modello, si consiglia di utilizzare un job della shell Python come tipo di lavoro per ridurre al minimo 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.
Iniziate a generare un numero limitato di file all'inizio. Per ridurre i costi e risparmiare tempo durante la creazione dei lavori 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 durante la 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 i job di estrazione, trasformazione e caricamento (ETL) di AWS Glue sia in una shell che in un ambiente di sviluppo integrato (IDE), consulta i ETLjob Developing AWS Glue local using a container
sul AWS Big Data Blog.
Per ulteriori best practice su 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. Nota: questo modello utilizza la | Sviluppatore di app |
Crea e configura un IAM ruolo. | Devi creare un IAM ruolo che il tuo job AWS Glue possa utilizzare per scrivere nel tuo bucket S3.
| Sviluppatore di app |
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea un lavoro AWS Glue. | Devi creare un lavoro 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 job AWS Glue da AWSCLI, esegui il comando seguente utilizzando i tuoi valori:
Nota: per istruzioni sull'esecuzione del job AWS Glue dalla AWS Management Console, vedere il job Run the AWS Glue nella storia della AWS Management Console in questo modello. Suggerimento: si consiglia di utilizzare il comando AWS CLI to run AWS Glue job se si desidera eseguire più esecuzioni contemporaneamente con parametri diversi, come mostrato nell'esempio precedente. Per generare tutti AWS CLI i comandi necessari per generare un numero definito di file utilizzando un determinato fattore di parallelizzazione, esegui il seguente codice bash (usando i tuoi valori):
Se usi lo script precedente, considera quanto segue:
Nota: per 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 AWS Management Console. |
| Sviluppatore di app |
Controlla 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 alle tue esigenze, ma tieni presente che esiste un limite di quota di servizio AWS Glue. Per ulteriori informazioni, consulta AWSGlue endpoints and quotas.
Output dello script Shell
L'esempio seguente mostra l'output dello script di shell dal job Run the AWS Glue dal brano della riga di comando secondo questo schema.
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
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, controllate quanto tempo impiega un job AWS Glue per generare il numero di file desiderato. Quindi, utilizza il numero giusto di esecuzioni simultanee per raggiungere i tuoi obiettivi. Ad esempio, se si presuppone che 100.000 file impieghino 40 minuti per completare l'esecuzione ma il tempo previsto sia di 30 minuti, è necessario aumentare l'impostazione di concorrenza per il processo 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, PIPEJSON, oCSV). Questo modello utilizza Boto3 per scrivere su un file e quindi salva il file in un bucket S3.
Di che livello di IAM autorizzazione ho bisogno nel bucket S3?
È necessario disporre di una politica 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.