2017-08-11 56 views
1

我以独立模式运行Spark。它读取几个文件作为RDD,处理它们,将结果合并到单个数据帧中,并将数据帧保存到本地磁盘中的parquet文件中。抑制Spark实验中的日志记录

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) 

我怎样才能抑制输出?

我已经试过标准压制技巧,他们都没有帮助。

sc.setLogLevel("FATAL") 

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

回答

2

添加在​​中使用的罐子的根目录中的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 DIR。

+0

我试过这种方法和@Denis方法 - 这些都不起作用。我看到日志记录设置已更改(某些日志被压制),但我仍然有很多类似于模式的消息“root | - column1:string ...”。 –

+2

@DmitryPetrov尝试将'log4j.properties'添加到'$ SPARK_HOME/conf'目录中。重新启动火花服务器并报告结果。 – javadba

+0

它没有帮助。我仍然有巨大的输出与模式:( –

1

我用下面的方法:

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中用于记录