簡體   English   中英

在紗線簇模式下執行Spark AccessControlException

[英]Executing Spark on yarn cluster mode AccessControlException

我有一些Spark代碼,用於分析CSV文件中的輸入數據集。

當我在群集模式下運行它時,出現以下錯誤(在本地模式下,到目前為止它可以正常工作)。

我的問題是:

  1. 局部變量會影響不同工作程序中的並行執行嗎?
  2. 我正在使用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)

根目錄inode="/"由具有Unix權限drwxr-xr-xsupergroup組的hdfs用戶擁有(755)

您的user=xxx顯然不是hdfs用戶,也不屬於superuser組。

這全部是基於Unix權限的,實際上與Spark沒有任何關系。

您的解決方案是

  1. (首選)了解如何將您的xxx用戶添加到superuser組, 以及如何在群集中的所有數據節點和名稱節點之間復制這些組權限。
  2. hdfs用戶身份運行代碼。
  3. 不得已 )使所有內容獲得HDFS 775或777許可

回答您的問題。

局部變量會影響不同工作程序中的並行執行嗎?

所有Spark執行程序都有自己的隔離局部變量。 廣播變量是必須設置為共享的變量。

我必須使用HDFS文件嗎?

不可以,但是如果您不這樣做,那么所有Spark工作者都必須能夠在自己的本地文件系統上讀取完全相同的文件。
或者,您可以設置其他一些共享文件系統,例如S3,(S)FTP或NFS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM