2

我尝试在 AWS Glue 上运行导入外部纯 Python 库 (psycopg2) 的自定义 Python 脚本,但失败了。我查看了 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 文件。

有谁知道出了什么问题?

非常感谢!

4

3 回答 3

0

psycopg2 包不是纯 Python,因此它不能与 Glue 一起使用。从 setup.py :

如果您希望避免从源代码构建 psycopg2,请改为安装 PyPI 'psycopg2-binary' 包。

AWS Glue 文档

您可以将 Python 扩展模块和库与您的 AWS Glue ETL 脚本一起使用,只要它们是用纯 Python 编写的。目前不支持 Pandas 等 C 库,也不支持用其他语言编写的扩展。

于 2018-05-15T13:45:11.267 回答
0

Glue 仅支持仅 python 库,即没有任何特定的本机库绑定。

于 2017-10-27T19:58:50.703 回答
0

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

运行类似的东西

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

再试一次。

于 2017-10-16T23:44:53.913 回答