2012-08-15 42 views
0

我正在嘗試編寫一個在僞分佈式集羣上執行Hadoop MapReduce作業的shell腳本,但省略了所有不以!爲前綴的輸出。我嘗試將輸出管道輸出爲awk並以這種方式進行過濾,這對大部分輸出都有效,但我仍然從JobClient輸出到終端。有沒有辦法來防止這種情況?阻止Hadoop將JobClient輸出發送到命令行?

我的代碼目前看起來是這樣的:

#!/bin/sh 

runtimes=$1 

for i in {0..$runtimes} 
do 
    cd ~/Documents/hadoop-1.0.3 
    bin/hadoop dfs -rmr /SC_out | awk "{}" 
    bin/hadoop jar ../MapReduceTests/SyntaxCounter.jar mrt.SyntaxCounter /WC_in/ /SC_out/ | awk "{}" 
    bin/hadoop dfs -cat /SC_out/part* | awk "\$0~/!Map/ {print \$0}" 
done 

編輯:這是我期待抑制的輸出類型:

12/08/15 16:45:17 INFO mapred.JobClient: Running job: job_201208151042_0128 
12/08/15 16:45:18 INFO mapred.JobClient: map 0% reduce 0% 
12/08/15 16:45:31 INFO mapred.JobClient: map 100% reduce 0% 
12/08/15 16:45:43 INFO mapred.JobClient: map 100% reduce 100% 

回答

1

此輸出stderr上,不是的std出來,所以修改如下:

bin/hadoop jar ../MapReduceTests/SyntaxCounter.jar mrt.SyntaxCounter \ 
    /WC_in/ /SC_out/ 2>/dev/null | awk "{}" 

或者更簡單地說,設置爲false詳細參數調用工作:

job.waitForCompletion(false); 
+0

工作,謝謝! – HypnoticSheep 2012-08-16 19:01:32