微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

hadoop jar提交mapreduce打印出的标准输出和标准错误 stdout stderr

Hadoop lxw1234@qq.com 13347℃ 0评论

在一个项目中,通过命令行提交MR,在捕获标准输出和标准错误时候发现,hadoop jar 命令提交mr正常执行,控制台打印出来的信息都被放到标准错误中了。

比如,执行wordcount,把标准错误重定向到error.log文件中:

	
hadoop jar hadoop-examples-0.20.2-cdh3u2.jar wordcount /tmp/lxw11/ /tmp/lxw11output 2>error.log

结果发现,MR正常执行,控制台没有打印出任何信息,而是把信息全部当成标准错误,定向到error.log文件中。

换一下,如果把标准输出重定向到error.log中,发现信息又被打印到控制台,而error.log中什么也没有。

	
hadoop fs -rmr /tmp/lxw11output
hadoop jar hadoop-examples-0.20.2-cdh3u2.jar wordcount /tmp/lxw11/ /tmp/lxw11output 1>error.log

导致这样的原因是在$HADOOP_HOME/conf/log4j.properties 中的console配置:

	
log4j.appender.console.target=System.err

将此配置改成:

	
log4j.appender.console.target=System.out

即可解决上面的问题。

但在hive中,用hive -e “sql”命令执行sql,也存在这样的问题,改变log4j配置没解决,看了下源码,初步判断是
org.apache.hadoop.hive.ql.session.SessionState.LogHelper 中的以下方法造成的:

	
public PrintStream getInfoStream() {
  SessionState ss = SessionState.get();
  return ((ss != null) && (ss.info != null)) ? ss.info : getErrStream();
}

具体还待研究。。

如果觉得本博客对您有帮助,请 赞助作者

转载请注明:lxw的大数据田地 » hadoop jar提交mapreduce打印出的标准输出和标准错误 stdout stderr

喜欢 (6)
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址