使用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中,或者该数组中的某些命令已删除该文件。当然,将检查:)