Apache spark 抑制火花拼花地板中的伐木
我在独立模式下运行Spark。它以RDD的形式读取一些文件,对它们进行处理,将结果合并到单个数据帧中,并将数据帧保存到本地磁盘中的拼花地板文件中Apache spark 抑制火花拼花地板中的伐木,apache-spark,logging,parquet,Apache Spark,Logging,Parquet,我在独立模式下运行Spark。它以RDD的形式读取一些文件,对它们进行处理,将结果合并到单个数据帧中,并将数据帧保存到本地磁盘中的拼花地板文件中 df.write.mode(SaveMode.Overwrite).parquet(输出) 此过程会产生噪声输出。我有30Gb的日志(我的输出拼花地板文件少了10倍!),主要是这样的格式: 根目录 |--第1列:字符串(nullable=true) |--第2列:字符串(nullable=true) |--第3列:字符串(nullable=true)
df.write.mode(SaveMode.Overwrite).parquet(输出)
此过程会产生噪声输出。我有30Gb的日志(我的输出拼花地板文件少了10倍!),主要是这样的格式:
根目录
|--第1列:字符串(nullable=true)
|--第2列:字符串(nullable=true)
|--第3列:字符串(nullable=true)
|--第4列:字符串(nullable=true)
|--第5列:字符串(nullable=true)
如何抑制输出
我已经尝试过标准的压制技巧,但没有一个有用
sc.setLogLevel(“致命”)
及
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.属性中
# 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\u HOME/conf
目录中。我已经尝试过这种方法,也尝试过@Denis方法-这些方法都不管用。我看到日志设置已更改(一些日志被抑制),但我仍然有许多类似于“root |--column1:string…”的模式消息。@DmitryPetrov尝试将log4j.properties
添加到$SPARK\u HOME/conf
目录中。重新启动spark服务器并报告结果。这没有帮助。我仍然有大量的模式输出:(嗯..你能展示一些输出的例子吗?我本以为log4j.logger.parquet=ERROR
会解决这个问题-但可能还有其他生成消息的包。当我将文件添加到jar的根目录(或者运行Maven时是src/main/resources/时)时,它就起作用了.谢谢大家。