2017-10-16 12 views
1

J'ai essayé d'exécuter un script Python personnalisé qui importe une bibliothèque externe pure python (psycopg2) sur AWS Glue mais a échoué. J'ai vérifié le journal CloudWatch et trouvé la raison de l'échec est que:Erreur d'autorisation dans HDFS lors de l'utilisation de la bibliothèque externe pure python dans AWS Glue

Spark a échoué la vérification des autorisations sur plusieurs dossiers dans HDFS, l'un d'eux contient la bibliothèque python externe que j'ai téléchargé sur S3 (s3: // chemin/à/psycopg2) qui requiert l'autorisation -x:

org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=READ_EXECUTE, inode="/user/root/.sparkStaging/application_1507598924170_0002/psycopg2":root:hadoop:drw-r--r-- 
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:320) 
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:219) 
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190) 
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1728) 
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1712) 
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPathAccess(FSDirectory.java:1686) 
at org.apache.hadoop.hdfs.server.namenode.FSDirStatAndListingOp.getListingInt(FSDirStatAndListingOp.java:76) 
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getListing(FSNamesystem.java:4486) 
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getListing(NameNodeRpcServer.java:999) 
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getListing(ClientNamenodeProtocolServerSideTranslatorPB.java:634) 
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) 
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616) 
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982) 
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049) 
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2045) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAs(Subject.java:422) 
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) 
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2045) 

Je fais en sorte que la bibliothèque ne contient que .py fichier comme indiqué dans la documentation AWS.

Est-ce que quelqu'un sait ce qui s'est mal passé?

Merci beaucoup!

+0

Avez-vous déjà découvert cela? J'ai le même problème. AccessControlException dans mon répertoire de bibliothèque python – mattalxndr

Répondre

0

Vous avez un répertoire qui n'a pas d'autorisation d'exécution. Dans les répertoires O/S basés sur Unix, le bit d'exécution doit être défini (au moins pour l'utilisateur).

Exécuter quelque chose comme

sudo chmod +x /user/root/.sparkStaging/application_1507598924170_0002/psycopg2

et essayer à nouveau.

+0

AWS Glue gère le cluster Spark et HDFS en arrière-plan. Tout ce que je peux faire est de fournir un chemin S3 vers la librairie python que j'ai téléchargée. Comment puis-je configurer S3 de sorte que lorsque la bibliothèque est chargée dans le cluster, elle aura + x permission –

0

Collez uniquement les bibliothèques python du support uniquement, c'est-à-dire sans aucune liaison de bibliothèque native spécifique.