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

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)

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 ests3-dist-cp, que vous ajoutez en tant qu'étape dans un cluster ou sur la ligne de commande. Grâce à S3DistCp, vous pouvez copier efficacement de grandes quantités de données d'Amazon S3 vers HDFS lesquelles elles peuvent être traitées par les étapes suivantes dans votre EMR cluster Amazon. Vous pouvez également utiliser S3 DistCp pour copier des données entre des compartiments Amazon S3 ou depuis HDFS 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 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 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 la section Concaténation de fichiers de parquet sur Amazon. EMR

Pour éviter les erreurs de copie lorsque vous utilisez S3DistCP pour copier un seul fichier (au lieu d'un répertoire) depuis 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

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. Il peut s'agir d'un emplacement HDFS ou d'un emplacement Amazon S3.

Exemple : ‑‑src=s3://amzn-s3-demo-bucket1/logs/j-3GYXXXXXX9IOJ/node

Important

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. Il peut s'agir d'un emplacement HDFS ou d'un emplacement Amazon S3.

Exemple : ‑‑dest=hdfs:///output

Important

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 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 (*), 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 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 (*), 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 depuis Amazon S3 vers HDFS lesquels ils sont déjà présents. 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 LZO compressés, 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 SSL et chiffrées automatiquement 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.

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'‑‑outputManifestindicateur. Lorsque l'‑‑previousManifestindicateur 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.

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

un fichier texte dans Amazon S3 (s3 ://), HDFS (hdfs :///) ou dans un système de fichiers local (file :/) qui contient une liste de src préfixes, 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, ce qui signifie qu'elle prend en charge les options génériques.

Ajouter S3 DistCp en tant qu'étape dans un cluster

Vous pouvez appeler S3 DistCp en l'ajoutant en tant qu'étape dans votre cluster. Les étapes peuvent être ajoutées à un cluster au lancement ou à un cluster en cours d'exécution à l'aide de la consoleCLI, ouAPI. 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 à un cluster, consultez la section Soumettre un travail à un cluster dans le Amazon EMR Management Guide.

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 EMR des commandes Amazon dans le AWS CLI, consultez la référence des AWS CLI commandes.

  • 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 :

    Pour ajouter une étape de DistCp copie S3 à un cluster en cours d'exécution, placez ce qui suit dans un JSON fichier enregistré dans Amazon S3 ou dans votre système de fichiers local, comme dans cet myStep.json exemple. Remplacez j-3GYXXXXXX9IOK avec votre identifiant de cluster et remplacez mybucket avec le nom de votre compartiment 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
Exemple Copiez les fichiers journaux depuis Amazon S3 vers HDFS

Cet exemple montre également comment copier des fichiers journaux stockés dans un compartiment Amazon S3 en HDFS 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 des fichiers journaux depuis Amazon S3 vers HDFS l'‑‑srcPatternoption, placez ce qui suit dans un JSON fichier enregistré dans Amazon S3 ou dans votre système de fichiers local, comme dans cet myStep.json exemple. Remplacez j-3GYXXXXXX9IOK avec votre identifiant de cluster et remplacez mybucket avec le nom de votre compartiment 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" } ]