2017-05-03 1 views
0

私はHDFS上でwokringしていて、hadoop confとfsパッケージのConfigurationおよびFileSystemクラスを使用してローカルシステムからHDFSファイルシステムにファイルをコピーしようとしていますPermissionファイルをローカルシステムからSTS javaプログラムからHDFSにコピーするときに犠牲にしました

import java.io.BufferedInputStream; 
import java.io.FileInputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.URI; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.IOUtils; 
import org.apache.hadoop.util.Progressable; 

public class FileCopyWithWrite { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     String localSrc = "/Users/bng/Documents/hContent/input/ncdc/sample.txt"; 
     String dst = "hdfs://localhost/sample.txt"; 
     try{ 

      InputStream in = new BufferedInputStream(new FileInputStream(localSrc)); 
      Configuration conf = new Configuration();; 
      FileSystem fs = FileSystem.get(URI.create(dst), conf); 

      OutputStream out = fs.create(new Path(dst), new Progressable() { 

       public void progress() { 
        // TODO Auto-generated method stub 
        System.out.print("."); 
       } 
      }); 

      IOUtils.copyBytes(in, out, 4092, true); 


     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

} 

をしかし、次のようにこのプログラムを実行すると、私に例外を与える:次のように

org.apache.hadoop.security.AccessControlException: Permission denied: user=KV, access=WRITE, inode="/":root:supergroup:drwxr-xr-x 
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:271) 
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:257) 
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:238) 
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:179) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6545) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6527) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkAncestorAccess(FSNamesystem.java:6479) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:2712) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2632) 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:2520) 

理由は、現在のユーザーのKVは、書籍のディレクトリへのファイルの書き込み権限を持っていないことを右ですHDFS。

正常に動作しているコンソールからファイルをコピーしようとしました。私はコンソールから次のコマンドを試しました:

sudo su 
hadoop fs -copyFromLocal /Users/bng/Documents/hContent/input/ncdc/sample.txt hdfs://localhost/sample.txt 

私はGoogleで多くの検索結果を見つけましたが、誰も私のために働いていませんでした。この問題を解決するには?どのように私はSTSまたはsudoの権限で日食から特定のクラスを実行することができますか?それとも他の選択肢がありますか?

+0

HDFSへのアクセス権を持つ同じユーザーでEclipseを実行していることを確認してください。 端末からの 'sudo ./eclipse'は、sudoの権限でeclipseを起動します – Sridhar

答えて

0

現在のユーザーにHDFSのアクセス許可を与えると、私の問題が解決しました。 私は次のようにHDFSでアクセス許可を追加しました。

hadoop fs -chown -R KV:KV hdfs://localhost 
関連する問題