Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 抑制火花拼花地板中的伐木_Apache Spark_Logging_Parquet - Fatal编程技术网

Apache spark 抑制火花拼花地板中的伐木

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)

我在独立模式下运行Spark。它以RDD的形式读取一些文件,对它们进行处理,将结果合并到单个数据帧中,并将数据帧保存到本地磁盘中的拼花地板文件中

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/时)时,它就起作用了.谢谢大家。