S3DistCp (s3-dist-cp)
Apache DistCp è uno strumento open source ideale per copiare grandi quantità di dati. S3DistCp è simile a DistCp, ma è ottimizzato per funzionare con AWS, in particolare Amazon S3. Il comando per S3DistCp in Amazon EMR versione 4.0 e successive è s3-dist-cp
, che puoi aggiungere come fase in un cluster o nella riga di comando. S3DistCp ti consente di copiare in modo efficiente grandi quantità di dati da Amazon S3 in HDFS, nel quale possono essere elaborati da fasi successive nel cluster Amazon EMR. Puoi inoltre utilizzare S3DistCp per copiare dati tra bucket Amazon S3 o da HDFS ad Amazon S3. S3DistCp è più efficiente e scalabile per la copia parallela di una grande quantità di oggetti tra bucket e tra account AWS.
Per i comandi specifici che dimostrano la flessibilità di S3DistCP in scenari reali, consulta l'articolo Seven tips for using S3DistCp (Sette consigli per l'utilizzo di S3DistCp)
Come DistCp, S3DistCp usa MapReduce per copiare 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 open source Apache DistCp, consulta la DistCp guide (Guida su DistCp)
Se S3DistCp non è in grado di copiare alcuni o tutti i file specificati, la fase del cluster ha esito negativo e restituisce un codice di errore diverso da zero. In questo caso, S3DistCp non elimina i file parzialmente copiati.
Importante
S3DistCp non supporta nomi di bucket Amazon S3 contenenti il trattino basso.
S3distCP 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 S3DistCp
Per quanto simile a DistCp, S3DistCp supporta una serie di opzioni differenti per modificare le modalità di copia e compressione dei dati.
Quando richiami S3DistCp, puoi specificare le opzioni descritte nella tabella seguente. Le opzioni vengono aggiunte alla fase con l'elenco di argomenti. Esempi di argomenti S3DistCp sono illustrati nella seguente tabella.
Opzione | Descrizione | Obbligatorio |
---|---|---|
‑‑src=LOCATION
|
Posizione dei dati da copiare. Può essere una posizione HDFS o Amazon S3. Esempio: ImportanteS3DistCp non supporta nomi di bucket Amazon S3 contenenti il trattino basso. |
Sì |
‑‑dest=LOCATION
|
Destinazione per i dati. Può essere una posizione HDFS o Amazon S3. Esempio: ImportanteS3DistCp non supporta nomi di bucket Amazon S3 contenenti il trattino basso. |
Sì |
‑‑srcPattern=PATTERN
|
Un'espressione regolare Se l'argomento dell'espressione regolare contiene caratteri speciali quali l'asterisco (*), l'espressione regolare o l'intera stringa Esempio: |
No |
‑‑groupBy=PATTERN
|
Un'espressione regolare 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 fra parentesi, la fase S3DistCp nel cluster ha esito negativo e viene restituito un errore. Se l'argomento dell'espressione regolare contiene caratteri speciali quali l'asterisco (*), l'espressione regolare o l'intera stringa Se è specificato Esempio: |
No |
‑‑targetSize=SIZE
|
La dimensione in mebibyte (MiB) dei file da creare in base all'opzione Se i file concatenati da Esempio: |
No |
‑‑appendToLastFile |
Specifica il comportamento di S3DistCp durante la copia da Amazon S3 su HDFS di file già presenti. Aggiunge i nuovi dati ai file esistenti. Se utilizzi |
No |
‑‑outputCodec=CODEC
|
Specifica i codec di compressione da utilizzare per i file copiati. I valori possibili sono Esempio: |
No |
‑‑s3ServerSideEncryption
|
Garantisce che i dati di destinazione siano trasferiti tramite il protocollo SSL e automaticamente crittografati in Amazon S3 con una chiave lato servizio AWS. Durante il recupero dei dati con S3DistCp, gli oggetti vengono automaticamente 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: |
No |
‑‑deleteOnSuccess
|
Se l'operazione di copia viene completata, questa opzione indica a S3DistCp di eliminare i file copiati dal percorso 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: |
No |
‑‑disableMultipartUpload
|
Disattiva l'utilizzo del caricamento in più parti. Esempio: |
No |
‑‑multipartUploadChunkSize=SIZE
|
Le dimensioni, in MiB, di ogni parte in un caricamento in più parti di Amazon S3. S3DistCP utilizza il caricamento in più parti quando copia dati di dimensioni superiori rispetto a Esempio: |
No |
‑‑numberFiles
|
Antepone numeri sequenziali ai file di output. Il conteggio inizia da 0, a meno che non venga specificato un valore diverso tramite Esempio: |
No |
‑‑startingIndex=INDEX
|
Utilizzato con Esempio: |
No |
‑‑outputManifest=FILENAME
|
Crea un file di testo, compresso con Gzip, che contiene un elenco di tutti i file copiati da S3DistCp. Esempio: |
No |
‑‑previousManifest=PATH
|
Legge un file manifest creato durante una precedente chiamata a S3DistCp utilizzando il flag Esempio: |
No |
‑‑requirePreviousManifest |
Richiede un manifest precedente creato durante una precedente chiamata a S3DistCp. 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 Esempio: |
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 è Esempio: |
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, S3DistCp cerca di preservare la classe di storage. Esempio: |
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 Se Esempio: |
No |
Oltre alle opzioni sopra riportate, in S3DistCp è implementata l'interfaccia Tool
Aggiunta di S3DistCp come fase in un cluster
È possibile effettuare la chiamata a S3DistCp aggiungendolo come fase nel cluster. È possibile aggiungere fasi a un cluster all'avvio o in esecuzione utilizzando la console, la CLI o l'API. I seguenti esempi illustrano l'aggiunta di una fase S3DistCp su 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 una fase S3DistCp a un cluster in esecuzione utilizzando la AWS CLI
Per ulteriori informazioni sull'utilizzo di comandi Amazon EMR nella AWS CLI, consulta la Guida di riferimento ai comandi della AWS CLI.
-
Per aggiungere una fase a un cluster che chiama S3DistCp, trasferire come argomenti i parametri che specificano in che modo S3DistCp 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:-
‑‑cluster-id
specifica il cluster -
Jar
indica la posizione del file JAR di S3DistCp. Per un esempio di come eseguire un comando su un cluster utilizzando command-runner.jar, consulta Invia una fase JAR personalizzata per l'esecuzione di uno script o di un comando. -
Args
è un elenco separato da virgole delle coppie nome-valore da trasferire a S3DistCp. Per un elenco completo delle opzioni disponibili, consulta Opzioni S3DistCp.
Per aggiungere una fase di copia S3DistCp a un cluster in esecuzione, inserisci quanto segue in un file JSON salvato in Amazon S3 o nel file system locale come
per questo esempio. SostituiscimyStep.json
j-3GYXXXXXX9IOK
con l'ID del cluster e sostituiscimybucket
con il nome del bucket Amazon S3.[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://mybucket/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
per questo esempio. Sostituisci myStep.json
j-3GYXXXXXX9IOK
con l'ID del cluster e sostituisci mybucket
con il nome del bucket Amazon S3.
[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://mybucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*daemons.*-hadoop-.*"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]