从STS Java程序将文件从本地系统复制到HDFS时,已剥夺了许可



我使用Hadoop Conf和FS packages中的配置和文件系统类,试图将文件从本地系统复制到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上发现了很多搜索结果,但没有一个对我有用。如何解决这个问题?如何通过Sudo许可从STS或Eclipse运行特定类?还是还有其他选择?

在HDFS中为当前用户提供权限为我解决了问题。我在HDFS中添加了以下内容的权限:

hadoop fs -chown -R KV:KV hdfs://localhost

最新更新