在执行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();
}
}
我可以从同一位置删除文件,但不能删除任何建议。
答案 0 :(得分:1)
在单独的过程中执行指定的命令和参数。
这是一种方便的方法。形式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"};