我在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
答案 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
输出