2016-06-21 9 views
0

JAVAを介してUNIXコマンドを実行しようとしています。私のシェルコマンドはブタスクリプトを呼び出します。私はこれをUNIX端末で実行するとうまく動作しますが、javaを介して出力が得られませんでした。JAVAとUNIXを使用してPigコマンドを実行する

PFBコードJAVA:

public String executeCommand(String command) { 

    StringBuffer output = new StringBuffer(); 

    Process p; 
    try { 
     System.out.println("process started"); 
     p = Runtime.getRuntime().exec(command); 
     //p.waitFor(); 
     System.out.println("before reader"); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 

     //String line = "";   
     System.out.println("After reader "); 
     while (reader.readLine() != null) { 
      System.out.println("inside while loop *******************************"); 
      output.append(reader.readLine() + "\n"); 
      System.out.println(reader.readLine()); 
     } 
     System.out.println("while loop endedr"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     System.out.println("inside exception"); 
    } 
    return output.toString(); 
} 

pig_command: 時間豚-param indir = "/ホーム/ ********/INDIR /アーカイブ/予約/ 20160620 * /パーツ*」-param OUTDIR = "/ホーム/ *********/OUTDIR/HOURLYBOOKING/20160620/05" -stop_on_failure -x私はどのように

/home/directory/pig/pigscript.pigのMapReduce実行中のJavaプログラム: java -cp /home/directory/java_jar.jar com.Example.Tester pig_command

問題:上記のwhileループのコードはHDFSで正常に生成されていますが、何も印刷されません(ジョブログを出力するはずです)。

答えて

0

readline()を呼び出すたびに、次のストリームに進みます。 (System.out.printlnoutput.append...)の2行を省略しているので、ブタスクリプトの出力が1行か2行だけであれば、コンソールには何も表示されず、またはwhileループからStringBuffer(output)に追加されることもありません。この問題を解決するには

...

 //String line = "";   
     System.out.println("After reader "); 
     while (reader.readLine() != null) { 
      System.out.println("inside while loop *******************************"); 
      output.append(reader.readLine() + "\n"); 
      System.out.println(reader.readLine()); 
     } 

の実装は次のようになります。返信用

 String line = null;   
     System.out.println("After reader "); 
     while ((line = reader.readLine()) != null) { 
      //System.out.println("inside while loop *******************************"); 
      output.append(line + "\n"); 
      System.out.println(line); 
      } 
+0

おかげで、しかし、これは、既にテストされている、結果はしばらく内のコードと同じですループは実行されません。 –

関連する問題