在 AWS EMR 集群上启动 spark 命令行时权限被拒绝

Permission denied when starting spark Command line on AWS EMR cluster

我已经在 AWS EMR 服务上用 1 个密钥对启动了一个有 2 台机器(1 台主机,1 台核心机)的集群。

然后使用 ssh 登录主实例提供创建的 .pem

成功!

然后我尝试在主实例上 运行 spark-shell 或 pyspark 并得到以下错误

Error initializing SparkContext.
org.apache.hadoop.security.AccessControlException: Permission denied:   user=ec2-user, access=WRITE, inode="/user":hdfs:hadoop:drwxr-xr-x
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:271)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:257)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:238)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:179)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6512)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6494)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkAncestorAccess(FSNamesystem.java:6446)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInternal(FSNamesystem.java:4248)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInt(FSNamesystem.java:4218)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:4191)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:813)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:600)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:635)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:962)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2039)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2035)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2033)

自己解决

ssh 与 ec2-user 会成功登录,但在启动 spark 时会导致权限错误

ssh 用户 hadoop 解决了这个问题

要解决此问题,您不必始终以 hadoop 用户身份进行 ssh。 shell 正在尝试访问 HDFS 上的当前用户主目录。

运行 以下终端命令作为 hadoop 用户(例如使用 su)然后允许我使用 spark-shell 作为我的普通用户

hdfs dfs -mkdir /user/myuser
hdfs dfs -chown myuser:hadoop /user/myuser

(将 myuser 替换为您想要 运行 和 shell 的用户)