簡體   English   中英

使用 java.lang.Process 從 hdfs 中刪除文件夾時出現問題

[英]Issue while deleting folder from hdfs with java.lang.Process

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();

    }
}

從同一位置我可以刪除文件但不能刪除文件夾任何建議。

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);
 

一個更健壯的解決方案(防止您在路徑中出現空格的后續問題)是保留String[]形式,但正確拆分參數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM