如何减少Spark的运行时输出的冗长程度?

时间:2015-01-28 10:04:45

标签: scala apache-spark

如何减少Spark运行时产生的跟踪信息量?

默认值太详细,

如何关闭它,并在需要时打开它。

由于

详细模式

scala> val la = sc.parallelize(List(12,4,5,3,4,4,6,781))
scala> la.collect
15/01/28 09:57:24 INFO SparkContext: Starting job: collect at <console>:15
15/01/28 09:57:24 INFO DAGScheduler: Got job 3 (collect at <console>:15) with 1 output 
...
15/01/28 09:57:24 INFO Executor: Running task 0.0 in stage 3.0 (TID 3)
15/01/28 09:57:24 INFO Executor: Finished task 0.0 in stage 3.0 (TID 3). 626 bytes result sent to driver
15/01/28 09:57:24 INFO DAGScheduler: Stage 3 (collect at <console>:15) finished in 0.002 s
15/01/28 09:57:24 INFO DAGScheduler: Job 3 finished: collect at <console>:15, took 0.020061 s
res5: Array[Int] = Array(12, 4, 5, 3, 4, 4, 6, 781)

无声模式(预期)

scala> val la = sc.parallelize(List(12,4,5,3,4,4,6,781))
scala> la.collect
res5: Array[Int] = Array(12, 4, 5, 3, 4, 4, 6, 781)

4 个答案:

答案 0 :(得分:61)

Spark 1.4.1

sc.setLogLevel("WARN")

来自源代码中的评论:

  

有效日志级别包括:ALL,DEBUG,ERROR,FATAL,INFO,OFF,TRACE,WARN

Spark 2.x - 2.3.1

sparkSession.sparkContext().setLogLevel("WARN")

Spark 2.3.2

sparkSession.sparkContext.setLogLevel("WARN")

答案 1 :(得分:37)

引用“Learning Spark”一书。

  

您可以找到在shell中打印的日志记录语句   分心。您可以控制日志记录的详细程度。去做这个,   您可以在名为 log4j.properties 的conf目录中创建一个文件。   Spark开发人员已经为此文件包含了一个名为的模板   的 log4j.properties.template 即可。为了使日志记录更简洁,请创建一个   名为 conf / log4j.properties conf / log4j.properties.template 的副本   并找到以下行:

     

log4j.rootCategory=INFO, console

     

然后   降低日志级别,以便我们只显示WARN消息及以上   将其更改为以下内容:

     

log4j.rootCategory=WARN, console

     

当   你重新打开shell,你应该看到更少的输出。

答案 2 :(得分:4)

Spark应用级别的日志配置

使用此方法不需要群集中的代码更改用于spark应用程序

  • 让我们从 log4j.properties.template 创建一个新文件 log4j.properties
  • 然后使用log4j.rootCategory属性更改详细程度。
  • 说,我们需要检查给定jar的 ERROR log4j.rootCategory=ERROR, console

Spark提交命令将是

spark-submit \
    ... #Other spark props goes here    
    --files prop/file/location \
    --conf 'spark.executor.extraJavaOptions=-Dlog4j.configuration=prop/file/location' \
    --conf 'spark.driver.extraJavaOptions=-Dlog4j.configuration=prop/file/location' \
    jar/location \
    [application arguments] 

现在您只会看到ERROR分类的日志。

普通Log4j方式wo Spark(但需要代码更改)

为包orgakka

设置记录关闭
import org.apache.log4j.{Level, Logger}

Logger.getLogger("org").setLevel(Level.ERROR)
Logger.getLogger("akka").setLevel(Level.ERROR)

答案 3 :(得分:-1)

在Unix中,你总是可以将stderr传递给/dev/null,即:

run-example org.apache.spark.examples.streaming.NetworkWordCount localhost 9999 2> /dev/null