put命令

zmeyuzjn  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(447)

我想执行 hadoop fs -put <source> <destination> 来自java代码。当我直接从终端执行这个命令时,它工作得很好,但是当我尝试从java代码中使用

String[] str = {"/usr/bin/hadoop","fs -put", source, dest};
Runtime.getRuntime().exec(str);

我得到的错误是 Error: Could not find or load main class fs . 我试着从java执行一些非hadoop命令,比如ls,mkdir命令,它们工作得很好,但是hadoop命令没有得到执行,即使它们在终端上工作得很好。
可能的原因是什么?我该如何解决?
javaapi尝试:我试图使用javaapi来执行复制操作,但是我得到了一个错误。java代码是:

String source = "/home/tmpe/file1.csv";
        String dest = "/user/tmpe/file1.csv";
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://node1:8020");
        FileSystem fs = FileSystem.get(conf);
        Path targetPath = new Path(dest);
        Path sourcePath = new Path(source);
        fs.copyFromLocalFile(false,true,sourcePath,targetPath);

我得到的错误是:

Exception in thread "main" java.io.IOException: Mkdirs failed to create /user/tmpe
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:378)
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:364)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:564)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:545)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:452)
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:229)
    at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1230)

我已经创建了 /user/tmpe 文件夹,并且它具有完全的读写权限,但仍然会出现此错误。我无法解决这个问题

xdnvmnnf

xdnvmnnf1#

遇到了旧的帖子,但如果你还没有尝试过,请用 hadoop jar app_name.jar 而不是 java -jar . 这样,如果jar的类路径没有所有hadoop jar,它将获取预定义的jar $HADOOP_CLASSPATH .

vc9ivgsu

vc9ivgsu2#

我猜你可能没有 HADOOP_HOME 环境变量集。
但是既然你在 java ,你到底为什么要做一个 haddop fs -put 在外部进程中,当javaapi比shell更友好时?

相关问题