S3 (s3-dist-cp) DistCp - Amazon EMR

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à.

S3 (s3-dist-cp) DistCp

Apache DistCp è uno strumento open source che puoi utilizzare per copiare grandi quantità di dati. S3 DistCp è simile DistCp, ma ottimizzato per funzionare AWS, in particolare con Amazon S3. Il comando per S3 DistCp in Amazon EMR versione 4.0 e successive s3-dist-cp è quello che aggiungi come passaggio in un cluster o nella riga di comando. Utilizzando S3DistCp, puoi copiare in modo efficiente grandi quantità di dati da Amazon S3 in HDFS, dove possono essere elaborati con passaggi successivi nel tuo cluster Amazon EMR. Puoi anche usare S3 DistCp per copiare dati tra bucket Amazon S3 o da HDFS ad Amazon S3. S3 DistCp è più scalabile ed efficiente per la copia parallela di un gran numero di oggetti tra bucket e account. AWS

Per i comandi specifici che dimostrano la flessibilità di S3DistCP in scenari reali, consulta Sette suggerimenti per l'utilizzo di S3 sul blog Big Data. DistCp AWS

Ad esempio DistCp, S3 DistCp utilizza MapReduce la copia in modo distribuito. Condivide la copia, la gestione degli errori, il ripristino e le attività di creazione di report su più server. Per ulteriori informazioni sul progetto DistCp open source Apache, consulta la DistCpguida nella documentazione di Apache Hadoop.

Se S3 non DistCp è in grado di copiare alcuni o tutti i file specificati, la fase del cluster fallisce e restituisce un codice di errore diverso da zero. In questo caso, S3 non DistCp pulisce i file parzialmente copiati.

Importante

S3 non DistCp supporta i nomi di bucket Amazon S3 che contengono il carattere di sottolineatura.

S3 DistCp non supporta la concatenazione per i file Parquet. Usa invece. PySpark Per ulteriori informazioni, consulta la sezione relativa alla Concatenazione dei file Parquet in Amazon EMR.

Per evitare errori di copia quando si utilizza S3DistCP per copiare un singolo file (anziché una directory) da S3 a HDFS, utilizza Amazon EMR versione 5.33.0 o successive o Amazon EMR versione 6.3.0 o successive.

Opzioni S3 DistCp

Sebbene sia simile a DistCp, S3 DistCp supporta un diverso set di opzioni per modificare il modo in cui copia e comprime i dati.

Quando chiami S3DistCp, puoi specificare le opzioni descritte nella tabella seguente. Le opzioni vengono aggiunte alla fase con l'elenco di argomenti. Nella tabella seguente sono riportati alcuni esempi DistCp degli argomenti S3.

Opzione Descrizione Richiesto
‑‑src=LOCATION

Posizione dei dati da copiare. Può essere una posizione HDFS o Amazon S3.

Esempio: ‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node

Importante

S3 non DistCp supporta i nomi di bucket Amazon S3 che contengono il carattere di sottolineatura.

‑‑dest=LOCATION

Destinazione per i dati. Può essere una posizione HDFS o Amazon S3.

Esempio: ‑‑dest=hdfs:///output

Importante

S3 non DistCp supporta i nomi di bucket Amazon S3 che contengono il carattere di sottolineatura.

‑‑srcPattern=PATTERN

Un'espressione regolare che filtra l'operazione di copia per un sottoinsieme dei dati in ‑‑src. Se non è specificato né ‑‑srcPattern‑‑groupBy, tutti i dati in ‑‑src vengono copiati su ‑‑dest.

Se l'argomento dell'espressione regolare contiene caratteri speciali quali l'asterisco (*), l'espressione regolare o l'intera stringa ‑‑args deve essere racchiusa tra virgolette singole (').

Esempio: ‑‑srcPattern=.*daemons.*-hadoop-.*

No
‑‑groupBy=PATTERN

Un'espressione regolare che fa sì che S3 concateni i file che DistCp corrispondono all'espressione. Ad esempio, è possibile utilizzare questa opzione per riunire in un unico file tutti i file di log scritti in un'ora. Il filename concatenato è il valore trovato dall'espressione regolare per il raggruppamento.

Le parentesi indicano il modo in cui i file devono essere raggruppati, con tutti gli elementi che soddisfano l'istruzione tra parentesi riuniti in un singolo file di output. Se l'espressione regolare non include un'istruzione tra parentesi, il cluster ha esito negativo nella fase S3 e restituisce un errore. DistCp

Se l'argomento dell'espressione regolare contiene caratteri speciali quali l'asterisco (*), l'espressione regolare o l'intera stringa ‑‑args deve essere racchiusa tra virgolette singole (').

Se è specificato ‑‑groupBy, vengono copiati solo i file che corrispondono al modello specificato. Non è necessario specificare ‑‑groupBy e ‑‑srcPattern contemporaneamente.

Esempio: ‑‑groupBy=.*subnetid.*([0-9]+-[0-9]+-[0-9]+-[0-9]+).*

No
‑‑targetSize=SIZE

La dimensione in mebibyte (MiB) dei file da creare in base all'opzione ‑‑groupBy. Questo valore deve essere un numero intero. Quando ‑‑targetSize è impostata, S3 DistCp tenta di corrispondere a questa dimensione; la dimensione effettiva dei file copiati può essere maggiore o minore di questo valore. I processi vengono aggregati in base alle dimensioni del file di dati, pertanto è possibile che la dimensione del file di destinazione corrisponda a quella del file di origine.

Se i file concatenati da ‑‑groupBy hanno una dimensione maggiore rispetto al valore di ‑‑targetSize, vengono suddivisi in file part e denominati in sequenza con un valore numerico aggiunto alla fine. Ad esempio, un file concatenato in myfile.gz sarebbe suddiviso in parti come: myfile0.gz, myfile1.gz ecc.

Esempio: ‑‑targetSize=2

No
‑‑appendToLastFile

Specifica il comportamento di S3 DistCp durante la copia di file da Amazon S3 a HDFS già presenti. Aggiunge i nuovi dati ai file esistenti. Se utilizzi ‑‑appendToLastFile con ‑‑groupBy, i nuovi dati vengono aggiunti ai file che corrispondono agli stessi gruppi. Questa opzione rispetta anche il comportamento ‑‑targetSize quando usato con ‑‑groupBy.

No
‑‑outputCodec=CODEC

Specifica i codec di compressione da utilizzare per i file copiati. I valori possibili sono gzip, gz, lzo, snappy o none. È possibile utilizzare questa opzione, ad esempio, per convertire i file di input compressi con Gzip in file di output con compressione LZO o per decomprimere i file durante l'operazione di copia. Se scegli un codec di output, il filename viene aggiunto con l'estensione appropriata (ad esempio per gz e gzip, l'estensione è .gz). Se non specifichi un valore per ‑‑outputCodec, i file vengono copiati senza apportare modifiche alla compressione.

Esempio: ‑‑outputCodec=lzo

No
‑‑s3ServerSideEncryption

Assicura che i dati di destinazione vengano trasferiti tramite SSL e crittografati automaticamente in Amazon S3 utilizzando AWS una chiave lato servizio. Quando si recuperano dati utilizzando S3, gli oggetti vengono automaticamente DistCp decrittografati. Se tenti di copiare un oggetto non crittografato in un bucket Amazon S3 che richiede la crittografia, l'operazione ha esito negativo. Per maggiori informazioni, consulta Utilizzo della crittografia dei dati.

Esempio: ‑‑s3ServerSideEncryption

No
‑‑deleteOnSuccess

Se l'operazione di copia ha esito positivo, questa opzione fa sì che S3 elimini DistCp i file copiati dalla posizione di origine. Questa funzione è utile se stai copiando file di output, ad esempio i file di log, da una posizione a un'altra come attività pianificata e non vuoi copiare lo stesso file due volte.

Esempio: ‑‑deleteOnSuccess

No
‑‑disableMultipartUpload

Disattiva l'utilizzo del caricamento in più parti.

Esempio: ‑‑disableMultipartUpload

No
‑‑multipartUploadChunkSize=SIZE

Le dimensioni, in MiB, di ogni parte in un caricamento in più parti di Amazon S3. S3 DistCp utilizza il caricamento in più parti quando copia dati di dimensioni superiori a. multipartUploadChunkSize Per migliorare le prestazioni del processo, puoi aumentare le dimensioni di ogni parte. La dimensione predefinita è 128 MiB.

Esempio: ‑‑multipartUploadChunkSize=1000

No
‑‑numberFiles

Antepone numeri sequenziali ai file di output. Il conteggio inizia da 0, a meno che non venga specificato un valore diverso tramite ‑‑startingIndex.

Esempio: ‑‑numberFiles

No
‑‑startingIndex=INDEX

Utilizzato con ‑‑numberFiles per specificare il primo numero nella sequenza.

Esempio: ‑‑startingIndex=1

No
‑‑outputManifest=FILENAME

Crea un file di testo, compresso con Gzip, che contiene un elenco di tutti i file copiati da S3. DistCp

Esempio: ‑‑outputManifest=manifest-1.gz

No
‑‑previousManifest=PATH

Legge un file manifest creato durante una precedente chiamata a S3 utilizzando il flag. DistCp ‑‑outputManifest Quando il ‑‑previousManifest flag è impostato, S3 DistCp esclude i file elencati nel manifesto dall'operazione di copia. Se viene specificato ‑‑outputManifest insieme a ‑‑previousManifest, i file elencati nel manifest precedente compaiono anche nel nuovo file manifest, pur non venendo copiati.

Esempio: ‑‑previousManifest=/usr/bin/manifest-1.gz

No
‑‑requirePreviousManifest

Richiede un manifesto precedente creato durante una precedente chiamata a S3. DistCp Se impostato su false, non vengono generati errori se non viene specificato un manifest precedente. Il valore predefinito è true.

No
‑‑copyFromManifest

Inverte il comportamento di ‑‑previousManifest far sì che S3 DistCp utilizzi il file manifest specificato come elenco di file da copiare, anziché come elenco di file da escludere dalla copia.

Esempio: ‑‑copyFromManifest ‑‑previousManifest=/usr/bin/manifest-1.gz

No
‑‑s3Endpoint=ENDPOINT

Specifica l'endpoint Amazon S3 da utilizzare durante il caricamento di un file. Questa opzione imposta l'endpoint sia per l'origine che per la destinazione. Se non è impostato, l'endpoint predefinito è s3.amazonaws.com. Per un elenco degli endpoint di Amazon S3, consulta la sezione relativa a Regioni ed endpoint.

Esempio: ‑‑s3Endpoint=s3.eu-west-1.amazonaws.com

No
‑‑storageClass=CLASS

La classe di archiviazione da utilizzare quando la destinazione è Amazon S3. I valori validi sono STANDARD e REDUCED_REDUNDANCY. Se questa opzione non è specificata, S3 DistCp tenta di preservare la classe di archiviazione.

Esempio: ‑‑storageClass=STANDARD

No
‑‑srcPrefixesFile=PATH

Un file di testo in Amazon S3 (s3://), HDFS (hdfs:///) o nel file system locale (file:/) che contiene un elenco di prefissi src, uno per riga.

Se srcPrefixesFile viene fornito, S3 non DistCp elencherà il percorso src. Al contrario, genera un elenco di origine combinando tutti gli elenchi di prefissi specificati in questo file. Per generare percorsi di destinazione, invece dei prefissi verrà utilizzato il percorso relativo rispetto al percorso di src. Se viene specificato anche srcPattern, verrà applicato ai risultati dell'elenco combinato dei prefissi di origine per filtrare ulteriormente l'input. Se viene utilizzato copyFromManifest, gli oggetti nel manifest verranno copiati e srcPrefixesFile verrà ignorato.

Esempio: ‑‑srcPrefixesFile=PATH

No

Oltre alle opzioni precedenti, S3 DistCp implementa l'interfaccia Tool, il che significa che supporta le opzioni generiche.

Aggiungere S3 DistCp come fase in un cluster

Puoi chiamare S3 DistCp aggiungendolo come passaggio nel cluster. È possibile aggiungere fasi a un cluster all'avvio o in esecuzione utilizzando la console, la CLI o l'API. Gli esempi seguenti mostrano l'aggiunta di un DistCp passaggio S3 a un cluster in esecuzione. Per ulteriori informazioni sull'aggiunta di fasi a un cluster, consulta Invio di lavoro a un cluster nella Guida alla gestione di Amazon EMR.

Per aggiungere un DistCp passaggio S3 a un cluster in esecuzione utilizzando il AWS CLI

Per ulteriori informazioni sull'utilizzo dei comandi Amazon EMR in AWS CLI, consulta il AWS CLI Command Reference.

  • Per aggiungere un passaggio a un cluster che chiama S3DistCp, inserisci come argomenti i parametri che specificano come S3 DistCp deve eseguire l'operazione di copia.

    L'esempio seguente copia il log dei daemon da Amazon S3 a hdfs:///output. Nel comando riportato qui di seguito:

    Per aggiungere una fase di DistCp copia S3 a un cluster in esecuzione, inserisci quanto segue in un file JSON salvato in Amazon S3 o nel tuo file system locale, myStep.json come in questo esempio. j-3GYXXXXXX9IOKSostituiscilo con il tuo ID del cluster e amzn-s3-demo-bucket sostituiscilo con il nome del bucket Amazon S3.

    [ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*[a-zA-Z,]+"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]
    aws emr add-steps ‑‑cluster-id j-3GYXXXXXX9IOK ‑‑steps file://./myStep.json
Esempio Copia dei file di log da Amazon S3 ad HDFS

Questo esempio illustra anche come copiare in HDFS i file di log archiviati in un bucket Amazon S3 aggiungendo una fase a un cluster in esecuzione. In questo esempio l'opzione ‑‑srcPattern viene utilizzata per limitare i dati copiati nel log dei daemon.

Per copiare i file di log da Amazon S3 a HDFS utilizzando l'opzione ‑‑srcPattern, inserisci quanto segue in un file JSON salvato in Amazon S3 o nel file system locale come myStep.json per questo esempio. j-3GYXXXXXX9IOKSostituiscilo con il tuo ID del cluster e amzn-s3-demo-bucket sostituiscilo con il nome del bucket Amazon S3.

[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*daemons.*-hadoop-.*"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]