

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# S3 DistCp (s3-dist-cp)
<a name="UsingEMR_s3distcp"></a>

Apache DistCp est un outil open source que vous pouvez utiliser pour copier de grandes quantités de données. *S3 DistCp* est similaire DistCp, mais optimisé pour fonctionner avec AWS, en particulier, Amazon S3. La commande pour S3 DistCp dans Amazon EMR version 4.0 et versions ultérieures est`s3-dist-cp`, que vous ajoutez en tant qu'étape dans un cluster ou sur la ligne de commande. Avec S3DistCp, vous pouvez copier efficacement de grandes quantités de données d'Amazon S3 vers HDFS où elles peuvent être traitées par les étapes suivantes dans votre cluster Amazon EMR. Vous pouvez également utiliser S3 DistCp pour copier des données entre des compartiments Amazon S3 ou de HDFS vers Amazon S3. S3 DistCp est plus évolutif et plus efficace pour copier en parallèle un grand nombre d'objets entre des compartiments et des AWS comptes.

Pour des commandes spécifiques démontrant la flexibilité de S3DistCP dans des scénarios réels, consultez [Sept conseils d'utilisation de S3 DistCp](https://aws.amazon.com/blogs/big-data/seven-tips-for-using-s3distcp-on-amazon-emr-to-move-data-efficiently-between-hdfs-and-amazon-s3/) sur le AWS blog Big Data.

Par exemple DistCp, S3 DistCp utilise MapReduce pour copier de manière distribuée. Il partage les tâches de copie, de gestion des erreurs, de récupération et de création de rapports entre plusieurs serveurs. Pour plus d'informations sur le projet DistCp open source Apache, consultez le [DistCpguide](http://hadoop.apache.org/docs/stable/hadoop-distcp/DistCp.html) dans la documentation d'Apache Hadoop.

Si S3 DistCp ne parvient pas à copier tout ou partie des fichiers spécifiés, l'étape du cluster échoue et renvoie un code d'erreur différent de zéro. Dans ce cas, S3 DistCp ne nettoie pas les fichiers partiellement copiés. 

**Important**  
S3 DistCp ne prend pas en charge les noms de compartiment Amazon S3 contenant le caractère de soulignement.  
S3 DistCp ne prend pas en charge la concaténation pour les fichiers Parquet. Utilisez PySpark plutôt. Pour plus d'informations, consultez [Concaténation de fichiers parquet dans Amazon EMR](https://aws.amazon.com/premiumsupport/knowledge-center/emr-concatenate-parquet-files/).  
Pour éviter les erreurs de copie lorsque vous utilisez S3DistCp pour copier un seul fichier (au lieu d'un répertoire) de S3 vers HDFS, utilisez Amazon EMR version 5.33.0 ou ultérieure, ou Amazon EMR version 6.3.0 ou ultérieure.

## DistCp Options S3
<a name="UsingEMR_s3distcp.options"></a>

Bien que similaire DistCp, S3 DistCp prend en charge un ensemble d'options différent pour modifier la façon dont il copie et compresse les données.

Lorsque vous appelez S3DistCp, vous pouvez spécifier les options décrites dans le tableau suivant. Les options sont ajoutées à l'étape à l'aide de la liste d'arguments. Des exemples d'DistCp arguments S3 sont présentés dans le tableau suivant. 


| Option  | Description  | Obligatoire  | 
| --- | --- | --- | 
| ‑‑src=LOCATION  |  Emplacement des données à copier. Cela peut être un emplacement dans HDFS ou Amazon S3.  Exemple : `‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node`   S3 DistCp ne prend pas en charge les noms de compartiment Amazon S3 contenant le caractère de soulignement.   | Oui  | 
| ‑‑dest=LOCATION  |  Destination des données. Cela peut être un emplacement dans HDFS ou Amazon S3.  Exemple : `‑‑dest=hdfs:///output`   S3 DistCp ne prend pas en charge les noms de compartiment Amazon S3 contenant le caractère de soulignement.   | Oui  | 
| ‑‑srcPattern=PATTERN  |  [Expression régulière](http://en.wikipedia.org/wiki/Regular_expression) qui filtre l'opération de copie sur un sous-ensemble des données à l'adresse `‑‑src`. Si `‑‑srcPattern` et `‑‑groupBy` ne sont pas spécifiés, toutes les données à l'adresse `‑‑src` sont copiées dans `‑‑dest`.  Si l'argument de l'expression régulière contient des caractères spéciaux, tels qu'un astérisque (\$1), l'expression régulière ou la chaîne `‑‑args` complète doit être mise entre guillemets simples (').  Exemple : `‑‑srcPattern=.*daemons.*-hadoop-.*`   | Non  | 
| ‑‑groupBy=PATTERN  |  [Expression régulière](http://en.wikipedia.org/wiki/Regular_expression) qui oblige S3 DistCp à concaténer les fichiers correspondant à l'expression. Par exemple, vous pouvez utiliser cette option pour combiner tous les fichiers journaux écrits en une heure dans un fichier unique. Le nom de fichier concaténé est la valeur correspondante à l'expression régulière pour le regroupement.  Les parenthèses indiquent comment les fichiers doivent être regroupés, en combinant tous les éléments qui correspondent à l'instruction entre parenthèses en un fichier de sortie unique. Si l'expression régulière n'inclut pas d'instruction entre parenthèses, le cluster échoue à l'DistCp étape S3 et renvoie une erreur.  Si l'argument de l'expression régulière contient des caractères spéciaux, tels qu'un astérisque (\$1), l'expression régulière ou la chaîne `‑‑args` complète doit être mise entre guillemets simples (').  Lorsque `‑‑groupBy` est spécifié, seuls les fichiers qui correspondent au modèle spécifié sont copiés. Vous n'avez pas besoin de spécifier `‑‑groupBy` et `‑‑srcPattern` en même temps.  Exemple : `‑‑groupBy=.*subnetid.*([0-9]+-[0-9]+-[0-9]+-[0-9]+).*`  | Non  | 
| ‑‑targetSize=SIZE  |  Taille, en mébioctets (Mio), des fichiers à créer en fonction de l'option `‑‑groupBy`. Cette valeur doit être un nombre entier. Lorsque cette option `‑‑targetSize` est définie, S3 DistCp essaie de correspondre à cette taille ; la taille réelle des fichiers copiés peut être supérieure ou inférieure à cette valeur. Les travaux sont regroupés en fonction de la taille du fichier de données. Par conséquent, il est possible que la taille du fichier cible corresponde à la taille du fichier de données source.  Si les fichiers concaténés par `‑‑groupBy` sont plus grands que la valeur de `‑‑targetSize`, ils sont divisés en fichiers plus petits, nommés de manière séquentielle avec une valeur numérique ajoutée à la fin de leur nom. Par exemple, un fichier concaténé `myfile.gz` peut être divisé en parties telles que : `myfile0.gz`, `myfile1.gz`, etc.  Exemple : `‑‑targetSize=2`   | Non  | 
| ‑‑appendToLastFile |  Spécifie le comportement de S3 DistCp lors de la copie vers des fichiers déjà présents depuis Amazon S3 vers HDFS. Il ajoute les données des nouveaux fichiers dans les fichiers existants. Si vous utilisez `‑‑appendToLastFile` avec `‑‑groupBy`, les nouvelles données sont ajoutées aux fichiers qui correspondent aux mêmes groupes. Cette option respecte également le comportement `‑‑targetSize` lorsqu'il est utilisé avec `‑‑groupBy.`  | Non  | 
| ‑‑outputCodec=CODEC  |  Spécifie le codec de compression à utiliser pour les fichiers copiés. Cela peut prendre les valeurs : `gzip`, `gz`, `lzo`, `snappy` ou `none`. Vous pouvez utiliser cette option, par exemple, pour convertir des fichiers d'entrée compressés avec Gzip en fichiers de sortie avec la compression LZO, ou pour décompresser les fichiers dans le cadre de l'opération de copie. Si vous choisissez un codec de sortie, le nom de fichier sera ajouté avec l'extension appropriée (par exemple, pour `gz` et `gzip`, l'extension est `.gz`). Si vous ne spécifiez pas de valeur pour `‑‑outputCodec`, les fichiers sont copiés sans modification dans leur compression.  Exemple : `‑‑outputCodec=lzo`   | Non  | 
| ‑‑s3ServerSideEncryption  |  Garantit que les données cibles sont transférées via SSL et automatiquement chiffrées dans Amazon S3 à l'aide d'une AWS clé côté service. Lorsque vous récupérez des données à l'aide de S3DistCp, les objets sont automatiquement déchiffrés. Si vous tentez de copier un objet non chiffré vers un compartiment Amazon S3 requérant le chiffrement, l'opération échoue. Pour plus d'informations, consultez [Utilisation du chiffrement des données](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html).  Exemple : `‑‑s3ServerSideEncryption`   | Non  | 
| ‑‑deleteOnSuccess  |  Si l'opération de copie est réussie, cette option oblige S3 DistCp à supprimer les fichiers copiés de l'emplacement source. Cela est utile si vous copiez des fichiers de sortie, tels que les fichiers journaux, d'un emplacement à un autre comme une tâche planifiée, et que vous ne voulez pas copier deux fois les mêmes fichiers.  Exemple : `‑‑deleteOnSuccess`   | Non  | 
| ‑‑disableMultipartUpload  |  Désactive l'utilisation du téléchargement partitionné.  Exemple : `‑‑disableMultipartUpload`   | Non  | 
| ‑‑multipartUploadChunkSize=SIZE  |  Taille, en Mio, de chaque partie d'un chargement partitionné sur Amazon S3. S3 DistCp utilise le téléchargement partitionné lorsqu'il copie des données dont la `multipartUploadChunkSize` taille est supérieure à. Pour améliorer la performance au travail, vous pouvez augmenter la taille de chaque pièce. La taille par défaut est de 128 Mio.  Exemple : `‑‑multipartUploadChunkSize=1000`   | Non  | 
| ‑‑numberFiles  |  Ajoute aux fichiers de sortie des numéros séquentiels. Le compteur démarre à 0, à moins qu'une autre valeur soit spécifiée par `‑‑startingIndex`.  Exemple : `‑‑numberFiles`   | Non  | 
| ‑‑startingIndex=INDEX  |  Utilisé avec `‑‑numberFiles` pour spécifier le premier numéro de la séquence.  Exemple : `‑‑startingIndex=1`   | Non  | 
| ‑‑outputManifest=FILENAME  |  Crée un fichier texte, compressé avec Gzip, qui contient une liste de tous les fichiers copiés par S3DistCp.  Exemple : `‑‑outputManifest=manifest-1.gz`   | Non  | 
| ‑‑previousManifest=PATH  |  Lit un fichier manifeste créé lors d'un appel précédent à S3 à DistCp l'aide de l'`‑‑outputManifest`indicateur. Lorsque l'`‑‑previousManifest`indicateur est défini, S3 DistCp exclut les fichiers répertoriés dans le manifeste de l'opération de copie. Si `‑‑outputManifest` est spécifié avec `‑‑previousManifest`, les fichiers répertoriés dans le manifeste précédent apparaissent également dans le nouveau fichier manifeste, même si les fichiers ne sont pas copiés.  Exemple : `‑‑previousManifest=/usr/bin/manifest-1.gz`   | Non  | 
| ‑‑requirePreviousManifest |  Nécessite un manifeste créé lors d'un appel précédent à S3DistCp. Si la valeur spécifiée est false, aucune erreur n'est générée lorsqu'un manifeste précédent n'est pas spécifié. Par défaut, la valeur est true.  | Non  | 
| ‑‑copyFromManifest  |  Inverse le comportement de S3 `‑‑previousManifest` DistCp pour qu'il utilise le fichier manifeste spécifié comme liste de fichiers à copier, au lieu d'une liste de fichiers à exclure de la copie.  Exemple : `‑‑copyFromManifest ‑‑previousManifest=/usr/bin/manifest-1.gz`   | Non  | 
| ‑‑s3Endpoint=ENDPOINT |  Spécifie le point de terminaison Amazon S3 à utiliser lors du chargement d'un fichier. Cette option définit le point de terminaison pour la source et la destination. S'il n'est pas défini, le point de terminaison par défaut est `s3.amazonaws.com`. Pour obtenir la liste des points de terminaison Amazon S3, consultez [Régions et points de terminaison](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region).  Exemple : `‑‑s3Endpoint=s3.eu-west-1.amazonaws.com`   | Non  | 
| ‑‑storageClass=CLASS |  La classe de stockage à utiliser lorsque la destination est Amazon S3. Les valeurs valides sont STANDARD et REDUCED\$1REDUNDANCY. Si cette option n'est pas spécifiée, S3 DistCp essaie de préserver la classe de stockage. Exemple : `‑‑storageClass=STANDARD`  | Non  | 
| ‑‑srcPrefixesFile=PATH |  fichier texte dans Amazon S3 (s3://), HDFS (hdfs:///) ou le système de fichiers local (file:/) qui contient une liste de préfixes `src`, un préfixe par ligne.  S'il `srcPrefixesFile` est fourni, S3 ne DistCp listera pas le chemin src. Au lieu de cela, il génère une liste source en tant que résultat combiné de la liste de tous les préfixes spécifiés dans ce fichier. Le chemin d'accès relatif par rapport au chemin d'accès src, à la place de ces préfixes, sera utilisé pour générer les chemins de destination. Si `srcPattern` est également spécifié, il est appliqué aux résultats combinés de liste des préfixes sources pour filtrer encore plus les données d'entrée. Si `copyFromManifest` est utilisé, les objets dans le manifeste seront copiés et `srcPrefixesFile` sera ignoré. Exemple : `‑‑srcPrefixesFile=PATH`  | Non  | 

Outre les options ci-dessus, S3 DistCp implémente l'[interface Tool](https://hadoop.apache.org/docs/current/api/org/apache/hadoop/util/Tool.html), ce qui signifie qu'elle prend en charge les options génériques. 

## Ajouter S3 DistCp en tant qu'étape dans un cluster
<a name="UsingEMR_s3distcp.step"></a>

Vous pouvez appeler S3 DistCp en l'ajoutant en tant qu'étape dans votre cluster. Il est possible d'ajouter des étapes à un cluster lors de son lancement ou à un cluster en cours d'exécution à l'aide de la console, de l'interface de ligne de commande ou de l'API. Les exemples suivants illustrent l'ajout d'une DistCp étape S3 à un cluster en cours d'exécution. Pour plus d'informations sur l'ajout d'étapes dans un cluster, consultez [Soumission de travail à un cluster](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html) dans le *Guide de gestion d'Amazon EMR*.

**Pour ajouter une DistCp étape S3 à un cluster en cours d'exécution à l'aide du AWS CLI**

Pour plus d'informations sur l'utilisation des commandes Amazon EMR dans le AWS CLI, consultez la référence des [AWS CLI commandes](https://docs.aws.amazon.com/cli/latest/reference/emr).
+ Pour ajouter une étape à un cluster qui appelle S3DistCp, transmettez les paramètres qui spécifient comment S3 DistCp doit effectuer l'opération de copie en tant qu'arguments. 

  L'exemple suivant copie les journaux des démons de Amazon S3 dans `hdfs:///output`. Dans la commande suivante :
  + `‑‑cluster-id` spécifie le cluster
  + `Jar`est l'emplacement du fichier DistCp JAR S3. Pour un exemple d'exécution d'une commande sur un cluster à l'aide de command-runner.jar, consultez [Soumettre une étape JAR personnalisée pour exécuter un script ou une commande](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-commandrunner.html#emr-commandrunner-examples).
  + `Args`est une liste séparée par des virgules des paires nom-valeur des options à transmettre à S3. DistCp Pour obtenir la liste complète des options disponibles, consultez [DistCp Options S3](#UsingEMR_s3distcp.options). 

  Pour ajouter une étape de DistCp copie S3 à un cluster en cours d'exécution, placez ce qui suit dans un fichier JSON enregistré dans Amazon S3 ou dans votre système de fichiers local, comme dans cet `myStep.json` exemple. *j-3GYXXXXXX9IOK*Remplacez-le par votre ID de cluster et remplacez *amzn-s3-demo-bucket* par le nom de votre compartiment 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 Copie des fichiers journaux d'Amazon S3 vers HDFS**  
Cet exemple illustre également comment copier les fichiers journaux stockés dans un compartiment Amazon S3 vers HDFS en ajoutant une étape à un cluster en cours d'exécution. Dans cet exemple, l'option `‑‑srcPattern` est utilisée pour limiter les données copiées dans les journaux des démons.   
Pour copier les fichiers journaux d'Amazon S3 vers HDFS à l'aide de l'option `‑‑srcPattern`, placez ce qui suit dans un fichier JSON enregistré dans Amazon S3 ou dans votre système de fichiers local en tant que `myStep.json` pour cet exemple. *j-3GYXXXXXX9IOK*Remplacez-le par votre ID de cluster et remplacez *amzn-s3-demo-bucket* par le nom de votre compartiment 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"        
    }
]
```