J'ai exécuté un travail sur le système EMR d'AWS et stocké la sortie dans le fichier HDFS du travail EMR. J'essaye alors de copier le résultat à S3 via distcp ou s3distcp, mais les deux échouent comme décrit ci-dessous. (Note: la raison pour laquelle je ne suis pas seulement d'envoyer ma sortie de travail de DME directement à S3 est en raison du problème (actuellement non résolue) Je décris dans Where is my AWS EMR reducer output for my completed job (should be on S3, but nothing there)?Problèmes lors de l'utilisation de distcp et s3distcp avec mon travail EMR en sortie vers HDFS
Pour distcp, je cours (suivant this post's recommendation):
elastic-mapreduce --jobflow <MY-JOB-ID> --jar \
s3://elasticmapreduce/samples/distcp/distcp.jar \
--args -overwrite \
--args hdfs:///output/myJobOutput,s3n://output/myJobOutput \
--step-name "Distcp output to s3"
Dans le journal des erreurs (/ mnt/var/log/Hadoop/étapes/8), je reçois:
With failures, global counters are inaccurate; consider running with -i
Copy failed: Status Code: 403, AWS Service: Amazon S3, AWS Request ID: <SOME-REQUEST-ID>, AWS Error Code: null, AWS Error Message: Forbidden, S3 Extended Request ID: <SOME-EXT-REQUEST-ID>
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:548)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:288)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:170)
...
Pour s3distcp, je cours (suivant the s3distcp documentation):
elastic-mapreduce --jobflow <MY-JOB-ID> --jar \
s3://us-east-1.elasticmapreduce/libs/s3distcp/1.0.4/s3distcp.jar \
--args '--src,/output/myJobOutput,--dest,s3n://output/myJobOutput'
Dans le journal des erreurs (/ mnt/var/log/Hadoop/étapes/9), je reçois:
java.lang.RuntimeException: Reducer task failed to copy 1 files: hdfs://10.116.203.7:9000/output/myJobOutput/part-00000 etc
at com.amazon.elasticmapreduce.s3distcp.CopyFilesReducer.close(Unknown Source)
at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:537)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:428)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
Toutes les idées ce que je fais mal?
Mise à jour: Quelqu'un répondre sur les forums AWS à un post about a similar distcp error mentionne les autorisations utilisateur utilisateur IAM,
mais je ne sais pas ce que cela signifie
(modifier: Je n'ai pas créé tous les utilisateurs IAM, donc il utilise les valeurs par défaut); J'espère que cela aide à identifier mon problème.
Mise à jour 2: Je remarqué cette erreur dans le fichier journal de NameNode (quand s3distcp réexécution) .. Je vais examiner les autorisations par défaut de DME pour voir si elle est mon problème:
2012-06-24 21:57:21,326 WARN org.apache.hadoop.security.ShellBasedUnixGroupsMapping (IPC Server handler 40 on 9000): got exception trying to get groups for user job_201206242009_0005
org.apache.hadoop.util.Shell$ExitCodeException: id: job_201206242009_0005: No such user
at org.apache.hadoop.util.Shell.runCommand(Shell.java:255)
at org.apache.hadoop.util.Shell.run(Shell.java:182)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:375)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:461)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:444)
at org.apache.hadoop.security.ShellBasedUnixGroupsMapping.getUnixGroups(ShellBasedUnixGroupsMapping.java:68)
at org.apache.hadoop.security.ShellBasedUnixGroupsMapping.getGroups(ShellBasedUnixGroupsMapping.java:45)
at org.apache.hadoop.security.Groups.getGroups(Groups.java:79)
at org.apache.hadoop.security.UserGroupInformation.getGroupNames(UserGroupInformation.java:966)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.<init>(FSPermissionChecker.java:50)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5160)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkTraverse(FSNamesystem.java:5143)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:1992)
at org.apache.hadoop.hdfs.server.namenode.NameNode.getFileInfo(NameNode.java:837)
...
Mise à jour 3: J'ai contacté AWS Support, et ils n'ont vu aucun problème, alors j'attends maintenant de recevoir des nouvelles de leur équipe d'ingénierie. Je reviendrai au fur et à mesure que j'entendrai plus
Ha! vu votre message supposé que "sortie" est un nom de votre seau :))) – denys