2017-05-03 68 views
0

我在HDFS上嘗試使用hadoop conf和fs軟件包中的Configuration和FileSystem類將文件從本地系統複製到HDFS文件系統如下:權限在從本地系統將文件從STS java程序複製到HDFS時發生Dennied

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 

我發現很多搜索結果的對谷歌,但沒有爲我工作。如何解決這個問題?我怎樣才能使用sudo權限從STS或eclipse運行特定的類?或者有沒有其他的選擇呢?

+0

確保您正在運行的誰有權訪問HDFS同一用戶的日食。 終端的'sudo ./eclipse'會啓動sudo的sudo權限 – Sridhar

回答

0

向HDFS中的當前用戶提供權限解決了我的問題。 我添加的權限,HDFS如下:

hadoop fs -chown -R KV:KV hdfs://localhost 
相關問題