我想從java代碼運行一個命令兩個合併到文件! 的命令是:從Java代碼運行Linux Hadoop fs命令
hadoop fs -cat /user/clouder/Index_1/part-r-00000 /user/cloudera/Index_2/part-r-00000 | hadoop fs -put - /user/cloudera/mergedfile
該命令運行完全上Cloudera的終端,但是當我運行從Java代碼是相同的,它顯示在控制檯上的合併的內容,但不創建在HDFS指定路徑mergedfile。如果mergedfile已經存在,那麼它輸出文件的早期數據,但不輸出新合併的數據,如果文件不存在,則不會創建新文件。在終端上運行的上述命令創建新文件的情況下,如果不存在,則會導致文件錯誤存在。
我的Java代碼如下:
process p;
try{
p =Runtime.getRuntime().exec("hadoop fs -cat /user/cloudera/Index_1/part-r-00000 /user/cloudera/Index_2/part-r-00000 | hadoop fs -put - /user/cloudera/mergedfile");
BufferredReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
while(s=br.readLine())!=null)
{
System.out.println(s);
}
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
我的目的是替代,如果有一個現有的文件,或如果不從Java代碼中存在的創建一個新的文件。
你爲什麼不使用[HDFS API(https://hadoop.apache.org/docs/r2.6.2/ API /組織/阿帕奇/的Hadoop/FS/FileSystem.html)? – gerosalesc