

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
<a name="UsingEMR_s3distcp"></a>

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](https://aws.amazon.com/blogs/big-data/seven-tips-for-using-s3distcp-on-amazon-emr-to-move-data-efficiently-between-hdfs-and-amazon-s3/) 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](http://hadoop.apache.org/docs/stable/hadoop-distcp/DistCp.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/emr-concatenate-parquet-files/).  
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
<a name="UsingEMR_s3distcp.options"></a>

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  | Description  | Richiesto  | 
| --- | --- | --- | 
| ‑‑src=LOCATION  |  Posizione dei dati da copiare. Può essere una posizione HDFS o Amazon S3.  Ad esempio: `‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node`   S3 non DistCp supporta i nomi di bucket Amazon S3 che contengono il carattere di sottolineatura.   | Sì  | 
| ‑‑dest=LOCATION  |  Destinazione per i dati. Può essere una posizione HDFS o Amazon S3.  Ad esempio: `‑‑dest=hdfs:///output`   S3 non DistCp supporta i nomi di bucket Amazon S3 che contengono il carattere di sottolineatura.   | Sì  | 
| ‑‑srcPattern=PATTERN  |  Un'[espressione regolare](http://en.wikipedia.org/wiki/Regular_expression) che filtra l'operazione di copia per un sottoinsieme dei dati in `‑‑src`. Se non è specificato né `‑‑srcPattern` né `‑‑groupBy`, tutti i dati in `‑‑src` vengono copiati su `‑‑dest`.  Se l'argomento dell'espressione regolare contiene caratteri speciali quali l'asterisco (\$1), l'espressione regolare o l'intera stringa `‑‑args` deve essere racchiusa tra virgolette singole (').  Ad esempio: `‑‑srcPattern=.*daemons.*-hadoop-.*`   | No  | 
| ‑‑groupBy=PATTERN  |  Un'[espressione regolare](http://en.wikipedia.org/wiki/Regular_expression) 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 (\$1), 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.  Ad 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.  Ad 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.  Ad 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html).  Ad 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.  Ad esempio: `‑‑deleteOnSuccess`   | No  | 
| ‑‑disableMultipartUpload  |  Disattiva l'utilizzo del caricamento in più parti.  Ad 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.  Ad 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`.  Ad esempio: `‑‑numberFiles`   | No  | 
| ‑‑startingIndex=INDEX  |  Utilizzato con `‑‑numberFiles` per specificare il primo numero nella sequenza.  Ad 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  Ad 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.  Ad 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.  Ad 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](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region).  Ad 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\$1REDUNDANCY. Se questa opzione non è specificata, S3 DistCp tenta di preservare la classe di archiviazione. Ad 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. Ad esempio: `‑‑srcPrefixesFile=PATH`  | No  | 

Oltre alle opzioni precedenti, S3 DistCp implementa l'[interfaccia Tool](https://hadoop.apache.org/docs/current/api/org/apache/hadoop/util/Tool.html), il che significa che supporta le opzioni generiche. 

## Aggiungere S3 DistCp come fase in un cluster
<a name="UsingEMR_s3distcp.step"></a>

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](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html) 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](https://docs.aws.amazon.com/cli/latest/reference/emr) 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:
  + `‑‑cluster-id` specifica il cluster
  + `Jar`è la posizione del file JAR 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](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-commandrunner.html#emr-commandrunner-examples).
  + `Args`è un elenco separato da virgole delle coppie nome-valore di opzioni da passare a S3. DistCp Per un elenco completo delle opzioni disponibili, consulta [Opzioni S3 DistCp](#UsingEMR_s3distcp.options). 

  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-3GYXXXXXX9IOK*Sostituiscilo con il tuo ID 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
  ```

**Example 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-3GYXXXXXX9IOK*Sostituiscilo con il tuo ID 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"        
    }
]
```