使用java.lang.Process从hdfs删除文件夹时出现问题

时间:2020-01-22 07:39:49

标签: java

在执行java.lang.Process中的hadoop命令时出现该问题。

hadoop fs -rm -R -skipTrash pathToFolder

此命令在unixbox上直接执行有效,但是当我尝试从Process执行时,它显示'-rm -R'未知命令。

public class Test1 {
    public static void main(String[] args) throws IOException {
        String[] commandToDelete = new String[]{"hadoop", "fs","-rm -R", "-skipTrash", "hdfs://pathToFolder"};
        Process process = Runtime.getRuntime().exec(commandToDelete);
        try {
            process.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(process.exitValue());
        BufferedReader errorReader = new BufferedReader(
              new InputStreamReader(process.getErrorStream()));
        String line = null;
        while ((line = errorReader.readLine()) != null) {
        System.out.println(line);
        }
       errorReader.close();

    }
}

我可以从同一位置删除文件,但不能删除任何建议。

2 个答案:

答案 0 :(得分:1)

来自 exec(String[] cmdarray)

在单独的过程中执行指定的命令和参数。

这是一种方便的方法。形式exec(cmdarray)的调用的行为与调用exec(cmdarray,null,null)的行为完全相同。

因此,以下命令在单独的进程中运行,这就是-rm -R是未知命令的原因:

String[] commandToDelete = new String[]{"hadoop", "fs","-rm -R", "-skipTrash", "hdfs://pathToFolder"};
    

运行如下:

String command = "hadoop fs -rm -R -skipTrash hdfs://pathToFolder"
Process process = Runtime.getRuntime().exec(command);
 

答案 1 :(得分:0)

一个更可靠的解决方案(可以防止您随后出现路径空间问题)是保留String[]格式,但可以正确分割参数:

String[] commandToDelete = new String[]{"hadoop", "fs", "-rm", "-R", "-skipTrash", "hdfs://pathToFolder"};
相关问题