无法记录火花作业输出

时间:2015-07-10 14:10:38

标签: scala logging apache-spark

我在scala中创建了一个小程序,可以在spark环境中运行。我有一个独立的群集配置。我提交了作业,并且在工作机器上成功运行了作业。我可以在我的控制台中看到结果,但是当我打开浏览器查看工作日志时,它不会在stdout中打印任何内容。只有stderr有一些日志。我正在使用println进行打印以在程序中打印。我错过了什么

这是程序

object SimpleJob {
  def main(args: Array[String]) {
    val logFile = "/var/log/syslog" // Should be some file on your system
    val conf = new SparkConf().setAppName("Spark log file reader");
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  }
}

更新 这是我的log.properties文件。

# Set everything to be logged to the console
log4j.rootCategory=INFO, stdout
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

# Settings to quiet third party logs that are too verbose
log4j.logger.org.spark-project.jetty=WARN
log4j.logger.org.spark-project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

1 个答案:

答案 0 :(得分:4)

我认为the link I posted in the comments for zero323's answer有你的答案。基本上,worker输出不会有输出,而是驱动程序将包含该日志记录。主程序中的所有内容,不在闭包中都将通过驱动程序运行。

这是一个示例伪程序,其中包含日志记录最终结束的注释:

object SimpleJob {
  def main(args: Array[String]) {
    ...
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => {
      println("Closure Stuff")//Displayed/Logged in the worker
      line.contains("a")
    }).count()
    println("Stuff")//Displayed/Logged in the driver
  }
}

另外,根据提供的链接,我相当肯定stderr显示log4j输出,而stdout显示println输出