我有一些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)
1条答案
按热度按时间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。