我想停止各种消息都是在火花壳。

我尝试编辑log4j。属性文件,以停止这些消息。

下面是log4j.properties的内容

# Define the root logger with appender file
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

# 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

但是消息仍然显示在控制台上。

下面是一些示例消息

15/01/05 15:11:45 INFO SparkEnv: Registering BlockManagerMaster
15/01/05 15:11:45 INFO DiskBlockManager: Created local directory at /tmp/spark-local-20150105151145-b1ba
15/01/05 15:11:45 INFO MemoryStore: MemoryStore started with capacity 0.0 B.
15/01/05 15:11:45 INFO ConnectionManager: Bound socket to port 44728 with id = ConnectionManagerId(192.168.100.85,44728)
15/01/05 15:11:45 INFO BlockManagerMaster: Trying to register BlockManager
15/01/05 15:11:45 INFO BlockManagerMasterActor$BlockManagerInfo: Registering block manager 192.168.100.85:44728 with 0.0 B RAM
15/01/05 15:11:45 INFO BlockManagerMaster: Registered BlockManager
15/01/05 15:11:45 INFO HttpServer: Starting HTTP Server
15/01/05 15:11:45 INFO HttpBroadcast: Broadcast server star

我怎么阻止这些?


当前回答

我只是将这一行添加到所有pyspark脚本的顶部,就在import语句的下面。

SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")

我的pyspark脚本的示例头

from pyspark.sql import SparkSession, functions as fs
SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")

其他回答

只需将以下参数添加到spark-shell或spark-submit命令

--conf "spark.driver.extraJavaOptions=-Dlog4jspark.root.logger=WARN,console"

检查确切的属性名(log4jspark.root。记录器这里)从log4j。属性文件。 希望这能有所帮助,干杯!

调整conf / log4j。其他描述的属性 log4j。rootCategory =错误控制台 确保在执行spark作业时使用log4j传递——file标志。属性文件路径 如果它仍然不起作用,您可能有一个包含log4j的jar。在新的log4j.properties之前被调用的属性。删除log4j。jar中的属性(如果合适)

另一种完全停止日志的方法是:

    import org.apache.log4j.Appender;
    import org.apache.log4j.BasicConfigurator;
    import org.apache.log4j.varia.NullAppender;

    public class SomeClass {

        public static void main(String[] args) {
            Appender nullAppender = new NullAppender();
            BasicConfigurator.configure(nullAppender);

            {...more code here...}

        }
    }

这对我很管用。 NullAppender是

一个忽略日志事件的Appender。(https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/appender/NullAppender.html)

禁用日志的方法如下:将日志级别设置为“OFF”。

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

或者编辑日志文件,并通过更改以下属性将日志级别设置为关闭:

log4j.rootCategory=OFF, console

除了以上所有的帖子,下面是为我解决这个问题的方法。

Spark使用slf4j绑定到记录器。如果log4j不是找到的第一个绑定,则可以编辑log4j。所有你想要的属性文件,记录器甚至没有使用。例如,这可能是一个SLF4J输出:

SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/~/.m2/repository/org/slf4j/slf4j-simple/1.6.6/slf4j-simple-1.6.6.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/~/.m2/repository/org/slf4j/slf4j-log4j12/1.7.19/slf4j-log4j12-1.7.19.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]

所以这里使用了SimpleLoggerFactory,它不关心log4j设置。

排除slf4j-simple包从我的项目通过

<dependency>
        ...
        <exclusions>
            ...
            <exclusion>
                <artifactId>slf4j-simple</artifactId>
                <groupId>org.slf4j</groupId>
            </exclusion>
        </exclusions>
    </dependency>

解决了这个问题,因为现在使用log4j记录器绑定和log4j中的任何设置。属性。 F.Y.I.我的log4j属性文件包含(除了正常配置)

log4j.rootLogger=WARN, stdout
...
log4j.category.org.apache.spark = WARN
log4j.category.org.apache.parquet.hadoop.ParquetRecordReader = FATAL
log4j.additivity.org.apache.parquet.hadoop.ParquetRecordReader=false
log4j.logger.org.apache.parquet.hadoop.ParquetRecordReader=OFF

希望这能有所帮助!