![](/img/trans.png)
[英]Read local/linux files in Spark Scala code executing in Yarn Cluster Mode
[英]Executing Spark on yarn cluster mode AccessControlException
我有一些Spark代碼,用於分析CSV文件中的輸入數據集。
當我在群集模式下運行它時,出現以下錯誤(在本地模式下,到目前為止它可以正常工作)。
我的問題是:
我相信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)
根目錄inode="/"
由具有Unix權限drwxr-xr-x
的supergroup
組的hdfs
用戶擁有(755)
您的user=xxx
顯然不是hdfs
用戶,也不屬於superuser
組。
這全部是基於Unix權限的,實際上與Spark沒有任何關系。
您的解決方案是
xxx
用戶添加到superuser
組, 以及如何在群集中的所有數據節點和名稱節點之間復制這些組權限。 hdfs
用戶身份運行代碼。 回答您的問題。
局部變量會影響不同工作程序中的並行執行嗎?
所有Spark執行程序都有自己的隔離局部變量。 廣播變量是必須設置為共享的變量。
我必須使用HDFS文件嗎?
不可以,但是如果您不這樣做,那么所有Spark工作者都必須能夠在自己的本地文件系統上讀取完全相同的文件。
或者,您可以設置其他一些共享文件系統,例如S3,(S)FTP或NFS。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.