2017-07-12 14 views
1

CSVファイルにある入力データセットを解析するスパークコードがあります。糸クラスターモードでスパークを実行するAccessControlException

クラスタモードで実行すると、次のエラーが表示されます(現時点ではローカルモードで正常に動作しています)。

私の質問は以下のとおりです。

  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) 

答えて

0

ルートディレクトリinode="/"drwxr-xr-x(755)

のUnixの権限でsupergroupグループのhdfsユーザーが所有しているあなたのuser=xxxは明らかにhdfsユーザーではありませんもsuperuserグループである....

これはすべてUnixの許可に基づいており、実際にはSparkとは関係ありません。

あなたのソリューションがある

  1. (優先)は、クラスタ内のすべてのdatanodesとnamenodes全体でこれらのグループの権限をコピーsuperuserグループにあなたのxxxユーザーを追加する方法を学びます。
  2. コードをhdfsユーザーとして実行します。
  3. ラストリゾート)のご質問にお答えするためにHDFS 775または777許可

のすべてを行います。

ローカル変数は、異なるワーカーの並列実行に影響しますか?

すべてのスパークエグゼキュータは、独立したローカル変数を持っています。ブロードキャスト変数は、共有するためにセットアップする必要がある変数です。

HDFSファイルを使用する必要がありますか?

いいえ、そうしないと、すべてのSparkワーカーが、自分のローカルファイルシステム上でまったく同じファイルを読み取ることができなくてはなりません。
また、S3、(S)FTP、NFSなどの他の共有FileSystemを設定することもできます。

関連する問題