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

查看数: 22844 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-12-20 08:27

正文摘要:

首先说明,这个问题在Yarn模式和standalone下都出现了,Spark版本1.6.3 我采用的是默认的日志配置,也就是: 并没有出现在stderr文件中。 因为我想调试spark,所以需要经常添加日志打印代码。现在向各位 ...

回复

bingoogle 发表于 2016-12-22 10:18:45
研究了会,终于知道原因了。
控制台输出的是driver的内容,包括构造DAG,提交作业,调度,分发tasks等等,因为代码执行经过textFile(), map(), flatMap()这些函数的时候都是在构造DAG,所以会在控制台中输出,而且driver本身没有stderr和stdout文件,所以只能在控制台输出。
每个executor自身的log都会输出到stderr中,所以当task运行后,RDD中compute()函数的log会记录在stderr中。
anyway,这个log system可以改进下
bingoogle 发表于 2016-12-22 10:17:33
nextuser 发表于 2016-12-20 15:21
system.out.println()

logger.info("This is info message.");  

即使同样是使用println来记录log,不同的位置代码也会输出在不同位置。不过我已经知道原因了。
nextuser 发表于 2016-12-20 15:21:39
bingoogle 发表于 2016-12-20 09:56
为什么有些地方log4j控制不了?而且,即使在同一个package下的两个.scala文件,一个的loginfo只在stderr ...



system.out.println()

logger.info("This is info message.");  
源码中可能存在上面两种情况。
只是举例,也就是说输出方式是多种的。
bingoogle 发表于 2016-12-20 09:56:00
nextuser 发表于 2016-12-20 09:09
两种可能:
第一种可能相信楼主已经猜到了,就是源码造成的。
源码中,可能有的不是log4j,而是直接输出 ...

为什么有些地方log4j控制不了?而且,即使在同一个package下的两个.scala文件,一个的loginfo只在stderr输出,另一个的loginfo只输出在控制台

nextuser 发表于 2016-12-20 09:09:39
两种可能:
第一种可能相信楼主已经猜到了,就是源码造成的。
源码中,可能有的不是log4j,而是直接输出。所以会造成控制台和日志文件不一致。
第二种
就是楼主的修改的源码可能位置不对或则没有生效调用到或则说调用的其它函数。可能处于底层。

从上面楼主的描述来看,修改源码是有效果的。所以根本原因,还是源码造成的。有些地方可能是log4j控制不到的。
关闭

推荐上一条 /2 下一条