在群集模式accesscontrolexception上执行spark

qoefvg9y  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(373)

我有一些spark代码,用于分析csv文件中的输入数据集。
当我在集群模式下运行它时,我得到了以下错误(在本地模式下,到目前为止还可以正常工作)。
我的问题是:
局部变量是否影响不同worker中的并行执行?
我使用localfile作为输入。我必须使用hdfs文件吗?
我相信rdd是并行的,输入文件可以存储在本地文件系统中。

Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=xxx, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
     at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkFsPermission(DefaultAuthorizationProvider.java:257) 
     at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:238) 
     at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:216) 
     at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkPermission(DefaultAuthorizationProvider.java:145) 
     at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:138) 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6599) 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6581) 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkAncestorAccess(FSNamesystem.java:6533) 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInternal(FSNamesystem.java:4337) 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInt(FSNamesystem.java:4307) 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:4280) 
     at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:853) 
     at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.mkdirs(AuthorizationProviderProxyClientProtocol.java:321) 
     at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:601) 
     at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) 
     at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619) 
     at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1060)
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2044)
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2040)
     at java.security.AccessController.doPrivileged(Native Method)
kwvwclae

kwvwclae1#

根目录 inode="/" 属于 hdfs 的用户 supergroup 具有unix权限的组 drwxr-xr-x (755)
你的 user= 显然不是 hdfs 用户nor不在 superuser 组。。。。
这都是基于unix权限的,实际上与spark无关。
你的解决方案是
(首选)学习如何添加 `` 用户到 superuser 跨群集中的所有datanodes和namenodes对这些组权限进行分组和复制。
hdfs 用户。
(万不得已)使hdfs 775或777中的所有内容获得许可
回答你的问题。
局部变量是否影响不同worker中的并行执行?
所有spark执行器都有自己独立的局部变量。广播变量是您必须设置才能共享的变量。
我必须使用hdfs文件吗?
不,但是如果您不这样做,您的所有spark工作人员必须能够在他们自己的本地文件系统上读取完全相同的文件。
或者可以设置其他共享文件系统,如s3、(s)ftp或nfs。

相关问题