python - 在 AWS Glue 中使用纯 python 外部库时 HDFS 中的权限错误

标签 python apache-spark amazon-s3 hdfs aws-glue

我尝试在 AWS Glue 上运行自定义的 Python 脚本以导入外部纯 Python 库 (psycopg2),但失败了。我查看了 CloudWatch 日志,发现失败的原因是:

Spark 未能通过 HDFS 中的几个文件夹的权限检查,其中一个包含我上传到 S3 (s3://path/to/psycopg2) 的外部 python 库,它需要 -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)

我确保该库仅包含 AWS 文档中指示的 .py 文件。

谁知道哪里出了问题?

非常感谢!

最佳答案

您有一个没有执行权限的目录。在基于 Unix 的 O/S 目录中,必须设置执行位(至少对于用户)才能使用。

运行类似的东西

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

再试一次。

关于python - 在 AWS Glue 中使用纯 python 外部库时 HDFS 中的权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779745/

相关文章:

Scala <控制台> :24: error: could not find implicit value for evidence parameter of type breeze. storage.DefaultArrayValue[任意]

python - 从 Python 字典键创建变量

python - 从 S3 读取 KMS 加密文件

python - 使用 PyQt5 和 OpenGL 使用 VBO 绘制多个对象?

java - 在 Spark 结构化流中使用 Kafka 接收器时是否必须设置检查点?

java - 将 jars 添加到 Spark 作业 - spark-submit

amazon-web-services - 通过 URL 浏览时,AWS S3 自动停止下载图像

java - 获取 S3 中的上传和下载进度百分比

java - Amazon SES 使用来自 S3ObjectInputStream 对象的 java 读取存储在 s3 存储桶中的电子邮件

python - 阅读 gtfs google transitFeed python