Spark 运行日志问题求助(关于控制台和stderr)

ibingoogle 2016-12-20 10:27:43
首先说明,这个问题在Yarn模式和standalone下都出现了,Spark版本1.6.3

我采用的是默认的日志配置,也就是:


但是我发现输出到控制台的信息,和stderr中保存的信息有一些一致(stdout没有输出),但是很多都不一致:
一致的部分:
控制台信息:

stderr内容:

不一致的部分(举例,这只是一部分):
控制台信息:

stderr内容:

我觉得既然log4j.properties中已经配置了log4j.appender.console.target=System.err,那应该所有控制台输出的信息都会保存到stderr中,
为什么会出现不一致的现象?有没有办法让所有在控制台输出的信息全部保存在stderr中?

于是我修改了源代码,做了些测试。我在SparkContext.scala文件的textFile函数中加入了新的打印日志的代码,各种级别都添加了,如下图所示:

但是运行后,我发现这几段代码打印的信息只出现在控制台上:

并没有出现在stderr文件中。
因为我想调试spark,所以需要经常添加日志打印代码。现在向各位大神求助,希望知道出现不一致现象的原因,以及如何解决,多谢多谢~~~
...全文
1220 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ibingoogle 2016-12-22
  • 打赏
  • 举报
回复
我是在Yarn和Standalone模式下输出的,不过你的说的话也给了我答案。 控制台输出的是driver的内容,包括构造DAG,提交作业,调度,分发tasks等等,因为代码执行经过textFile(), map(), flatMap()这些函数的时候都是在构造DAG,所以会在控制台中输出,而且driver本身没有stderr和stdout文件,所以只能在控制台输出。 每个executor自身的log都会输出到stderr中,所以当task运行后,RDD中compute()函数的log会记录在stderr中。 anyway,thanks
LinkSe7en 2016-12-20
  • 打赏
  • 举报
回复
你所谓不一致的地方,在stdout是driver的输出,在stderr的是executor的输出。你应该是local
  • 模式运行的Spark-Shell吧?去了解下两者的关系。

1,258

社区成员

发帖
与我相关
我的任务
社区描述
Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于MapReduce算法实现的分布式计算。
社区管理员
  • Spark
  • shiter
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧