阻止 Hadoop 将 JobClient 输出发送到命令行



我正在尝试编写一个shell脚本,该脚本将在伪分布式集群上执行Hadoop MapReduce作业,但省略所有前面没有!的输出。我尝试将输出管道到 awk 并以这种方式过滤它,这适用于大多数输出,但我仍然从 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%

此输出在 stderr 上,而不是 std 输出上,因此请修改如下:

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

或者更简单地说,调用将详细参数设置为 false 的作业:

job.waitForCompletion(false);

相关内容

  • 没有找到相关文章

最新更新