当前位置: 首页 > 知识库问答 >
问题:

从STS Java程序将文件从本地系统复制到HDFS时,权限被拒绝

阙阳夏
2023-03-14

我正在使用HDFS并尝试使用hadoop conf和fs包中的配置和文件系统类将一个文件从本地系统复制到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中books目录的文件写权限。

我试着从控制台复制文件,这是正常工作的。我从控制台尝试了以下命令:

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

我在谷歌上找到了很多搜索结果,但没有一个对我有效。如何解决这个问题?如何使用sudo权限从STS或eclipse运行特定的类?或者对此有其他选择吗?

共有1个答案

华懿轩
2023-03-14

在HDFS中为当前用户提供权限为我解决了这个问题。我在HDFS中添加了如下权限:

hadoop fs -chown -R KV:KV hdfs://localhost
 类似资料:
  • 如何将文件从HDFS复制到本地文件系统。文件下没有文件的物理位置,甚至没有目录。我如何将它们移到本地进行进一步的验证。我通过winscp进行了尝试。

  • 我已经在Ubuntu 14.04上安装了hadoop。每当我将文件从本地文件系统复制到HDFS时,我都会出现以下错误。 我使用这个命令: 我遇到的错误是: 我是Linux环境的新手。我不明白哪个文件不存在。

  • 我需要从本地文件系统复制一个文件夹到HDFS。我找不到任何例子移动文件夹(包括它的所有子文件夹)到HDFS

  • 问题内容: 尝试使用Java代码将目录从本地系统复制到HDFS时遇到问题。我能够移动单个文件,但无法找到一种移动带有子文件夹和文件的整个目录的方法。有人可以帮我吗?提前致谢。 问题答案: 只需使用的copyFromLocalFile方法即可。如果源路径是本地目录,它将被复制到HDFS目标:

  • 是否有一种已知的方法使用Hadoop api/spark scala在Hdfs上将文件从一个目录复制到另一个目录? 我尝试使用copyFromLocalFile,但没有帮助

  • 问题内容: 我的权限被拒绝,但不知道为什么。从我的詹金斯大师那里,我能够使用ssh-rsa-key运行以下命令 注意: 当我发现从属主机不存在并使其由jenkins用户拥有时,我确实在从属主机上手动创建了/ var / jenkins /。我的主jenkins配置为使用.ssh密钥使用jenkins @ mySlaveHost。 有什么想法为什么我会拒绝权限吗?它想做什么? 这是单击[Lauch