Comment copier un gros volume de données à partir d'Amazon S3 vers HDFS dans mon cluster Amazon EMR ?

Dernière mise à jour :22/11/2021

Je souhaite copier une grande quantité de données à partir d'Amazon Simple Storage Service (Amazon S3) vers mon cluster Amazon EMR.

Brève description

Utilisez S3DistCp pour copier des données entre Amazon S3 et des clusters Amazon EMR. S3DistCp est installé sur les clusters Amazon EMR par défaut. Pour appeler S3DistCP, insérez-le parmi les étapes au lancement ou après l'exécution du cluster.

Résolution

Pour insérer une étape S3DistCp à un cluster en cours d'exécution à l'aide de l'interface de ligne de commande AWS (AWS CLI), consultez Ajout de S3DistCp en tant qu'étape dans un cluster.

Remarque : en cas d'erreurs lors de l'exécution des commandes AWS CLI, vérifiez que vous utilisez la version la plus récente de l'AWS CLI.

Pour ajouter une étape S3DistCp à l'aide de la console, procédez comme suit :

1.    Ouvrez la console Amazon EMR, puis choisissez Clusters.

2.    Choisissez le cluster Amazon EMR dans la liste, puis choisissez Steps (Étapes).

3.    Choisissez Add step (Ajouter une étape), puis choisissez les options suivantes :

Pour Type d'étape, choisissez JAR personnalisé.
Pour Name (Nom), entrez un nom pour l'étape S3DistCp.
Pour JAR location (emplacement JAR), entrez command-runner.jar. Pour plus d'informations, consultez Exécuteur de commandes.
Pour Arguments, entrez des options similaires à ce qui suit : s3-dist-cp --src=s3://s3distcp-source/input-data --dest=hdfs://output-folder1.
Pour Action on failure (Action en cas d'échec), choisissez Continue (continuer).

4.    Choisissez Ajouter.

5.    Lorsque l' état de l'étape passe à Terminé, vérifiez que les fichiers ont été copiés dans le cluster :

$ hadoop fs -ls hdfs:///output-folder1/

Résolution

Pour résoudre les problèmes liés à S3DistCp, vérifiez les journaux d'étape et de tâche.

1.    Ouvrez la console Amazon EMR, puis choisissez Clusters.

2.    Choisissez le cluster Amazon EMR dans la liste, puis choisissez Steps (Étapes).

3.    Dans la colonne Log files (Fichiers journaux), choisissez le journal d'étape approprié :

controller : informations sur le traitement de l’étape. Si l'étape échoue lors de son chargement, vous pouvez retracer la pile dans ce journal.
syslog : journaux provenant de logiciels non Amazon, tels qu'Apache et Hadoop.
stderr : canal d'erreur standard de Hadoop lors du traitement de l'étape.
stdout : canal de sortie standard de Hadoop lors du traitement de l'étape.

Si vous ne trouvez pas la cause principale de l'échec dans les journaux d'étape, vérifiez les journaux de tâche S3DistCp :

1.    Ouvrez la console Amazon EMR, puis choisissez Clusters.

2.    Choisissez le cluster Amazon EMR dans la liste, puis choisissez Steps (Étapes).

3.    Dans la colonne Log files (Fichiers journaux), choisissez View jobs (Afficher les travaux).

4.    Dans la colonne Actions, choisissez View tasks (Afficher les tâches).

5.    Si des tâches ont échoué, choisissez View attempts (Afficher les tentatives) pour voir les journaux de tâche.

Erreurs courantes

La tâche de réducteur a échoué en raison d'un manque de mémoire.

Si un message d'erreur similaire au message suivant apparaît dans le journal stderr de l'étape, cela implique que la tâche S3DistCp a échoué, car la quantité de mémoire était insuffisante pour traiter les tâches du réducteur :

Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Container [pid=19135,containerID=container_1494287247949_0005_01_000003] is running beyond virtual memory limits. Current usage: 569.0 MB of 1.4 GB physical memory used; 3.0 GB of 3.0 GB virtual memory used. Killing container.

Pour résoudre ce problème, utilisez une des options suivantes pour augmenter les ressources de mémoire pour les tâches du réducteur :

Erreur d'autorisation Amazon S3 :

Si un message d'erreur similaire au message suivant apparaît dans le journal stderr de l'étape, cela implique que la tâche S3DistCp n'est pas parvenue à accéder à Amazon S3 en raison d'un problème d'autorisations :

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: REQUEST_ID

Pour résoudre ce problème, consultez Erreurs d'autorisations.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?