如何减少 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)

Spark 1.4.1

sc.setLogLevel("WARN")

从源代码中的注释:

有效的日志级别包括:全部、调试、错误、严重、信息、关闭、跟踪、警告

火花 2.x - 2.3.1

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

火花 2.3.2

sparkSession.sparkContext.setLogLevel("WARN")

引用自"Learning Spark"一书。

您可能会在 shell 中找到打印的日志记录语句 分心。您可以控制日志记录的详细程度。为此, 您可以在 conf 目录中创建一个名为 log4j.properties 的文件。 Spark 开发人员已经为此文件包含一个名为 log4j.properties.template. 要使日志记录不那么冗长,请创建一个 名为 conf/log4j.properties.template 的副本,称为 conf/log4j.properties 并找到以下行:

log4j.rootCategory=INFO, console

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

log4j.rootCategory=WARN, console

什么时候 重新打开外壳,应该会看到较少的输出。

Spark 应用级别的日志记录配置

使用这种方法,无需在 Spark 应用程序的集群中更改代码

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

火花提交命令将是

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] 

现在,您将只看到错误分类的日志。

<小时 />

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

为包orgakka设置注销

import org.apache.log4j.{Level, Logger}
Logger.getLogger("org").setLevel(Level.ERROR)
Logger.getLogger("akka").setLevel(Level.ERROR)

如果要从 shell 调用命令,则可以在不更改任何配置的情况下执行很多操作。这是设计使然。

下面是几个使用管道的 Unix 示例,但您可以在其他环境中执行类似的过滤器。

完全静音日志(风险自负)

管道stderr到/dev/null,即:

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

忽略INFO消息

run-example org.apache.spark.examples.streaming.NetworkWordCount localhost 9999 | awk '{if ($3 != "INFO") print $0}'

最新更新