Comment puis-je transférer un volume important de données depuis Amazon S3 dans HDFS vers mon cluster Amazon EMR ?
Dernière mise à jour : 11/02/2020
Je souhaite transférer un volume important de données depuis Amazon Simple Storage Service (Amazon S3) vers mon cluster Amazon EMR. Quelle est la meilleure façon de procéder ?
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 : si vous recevez des erreurs lors de l'exécution des commandes depuis l'interface de ligne de commande AWS, assurez-vous que vous utilisez la version AWS CLI la plus récente.
Pour ajouter une étape S3DistCp à l'aide de la console :
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/
Remarque : Une bonne pratique consiste à regrouper les petits fichiers dans quelques fichiers de taille plus importante à l'aide de l'option groupBy, puis de comprimer les fichiers de taille importante à l'aide de l'option outputCodec.
Résolution
Pour résoudre les problèmes liés à S3DistCp, vérifiez les journaux d'étape et de tâche.
Journaux d'étape :
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 : décrit l'exécution des tâches Hadoop dans l’étape.
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 le motif 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 suivant apparaît dans le journal stderr de l'étape, la tâche S3DistCp échoue 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 :
- Augmentez le paramètre yarn.nodemanager.vmem-pmem-ratio ou mapreduce.reduce.memory.mb dans le fichier yarn-site.xml sur le nœud principal du cluster.
- Ajoutez des instances Amazon Elastic Compute Cloud (Amazon EC2) à votre cluster.
Erreur d'autorisation Amazon S3 :
Si un message d'erreur similaire au suivant apparaît dans le journal stderr de l'étape, la tâche S3DistCp n'est pas parvenu à 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 Permissions errors (Erreurs d'autorisations).
Informations connexes
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?