Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java.lang.Process从hdfs中删除文件夹时出现问题_Java - Fatal编程技术网

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

使用java.lang.Process从hdfs中删除文件夹时出现问题,java,Java,从java.lang.Process执行hadoop命令时出现问题 hadoop fs -rm -R -skipTrash pathToFolder 这个直接在unixbox上执行的命令正在工作,但当我试图从进程执行它时,它会显示'-rm-R'未知命令 public class Test1 { public static void main(String[] args) throws IOException { String[] commandToDelete = ne

java.lang.Process
执行hadoop命令时出现问题

hadoop fs -rm -R -skipTrash pathToFolder
这个直接在unixbox上执行的命令正在工作,但当我试图从进程执行它时,它会显示
'-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();

    }
}

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

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

这是一种方便的方法。表单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);
 
一个更可靠的解决方案(防止后续出现路径中的空格问题)是使用
字符串[]
表单,但正确分割参数:

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

从同一位置删除文件的过程如何?您可以检查您的命令,该命令必须位于同一个like中,或者该数组中的某些命令已删除该文件。当然,将检查:)