抑制 Spark parquet 中的日志记录

Suppress logging in Spark parquet

I 运行 独立模式下的 Spark。它读取几个文件 RDD,处理它们,将结果联合到一个数据帧中,并将数据帧保存到本地磁盘中的镶木地板文件。

df.write.mode(SaveMode.Overwrite).parquet(output)

此过程会产生嘈杂的输出。我有 30Gb 的日志(我的输出镶木地板文件少了 10 倍!),大部分是这样的格式:

root
 |-- column1: string (nullable = true)
 |-- column2: string (nullable = true)
 |-- column3: string (nullable = true)
 |-- column4: string (nullable = true)
 |-- column5: string (nullable = true)

如何抑制输出?

我已经尝试过标准的抑制技巧,none 有帮助。

sc.setLogLevel("FATAL")

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

我使用以下方法:

  def suppressParquetLogging(): Unit = {
    // Based on https://issues.apache.org/jira/browse/SPARK-8118
    val contents =
      """
        |org.apache.parquet.handlers=java.util.logging.ConsoleHandler
        |java.util.logging.ConsoleHandler.level=SEVERE
      """.stripMargin
    val inputStream = new ByteArrayInputStream(contents.getBytes(StandardCharsets.UTF_8))
    java.util.logging.LogManager.getLogManager.readConfiguration(inputStream)
  }

假设您通常不使用 java.util.logging.LogManager 进行日志记录

spark-submit中使用的jar根目录下添加一个log4j.properties。或者,如果您使用的是 intellij,请将其放入 src/main/resources

将以下内容放入 log4j.properties

# Set everything to be logged to the file bagel/target/unit-tests.log
log4j.rootCategory=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
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

# Ignore messages below warning level from Jetty, because it's a bit verbose
# Settings to quiet third party logs that are too verbose
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
log4j.logger.org.apache.spark=WARN
log4j.logger.parquet=ERROR
log4j.logger.org.apache.spark.sql.execution.datasources.parquet=ERROR
log4j.logger.org.apache.spark.sql.execution.datasources.FileScanRDD=ERROR
log4j.logger.org.apache.hadoop.io.compress.CodecPool=ERROR

更新 一种更可靠的抑制日志记录的方法:

将上面的log4j.properties添加到$SPARK_HOME/conf目录中。