How to stop INFO messages displaying on spark console?

后端 未结 20 3083
广开言路
广开言路 2020-11-22 13:40

I\'d like to stop various messages that are coming on spark shell.

I tried to edit the log4j.properties file in order to stop these message.

Her

相关标签:
20条回答
  • 2020-11-22 14:25

    Use below command to change log level while submitting application using spark-submit or spark-sql:

    spark-submit \
    --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:<file path>/log4j.xml" \
    --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:<file path>/log4j.xml"
    

    Note: replace <file path> where log4j config file is stored.

    Log4j.properties:

    log4j.rootLogger=ERROR, console
    
    # set the log level for these components
    log4j.logger.com.test=DEBUG
    log4j.logger.org=ERROR
    log4j.logger.org.apache.spark=ERROR
    log4j.logger.org.spark-project=ERROR
    log4j.logger.org.apache.hadoop=ERROR
    log4j.logger.io.netty=ERROR
    log4j.logger.org.apache.zookeeper=ERROR
    
    # add a ConsoleAppender to the logger stdout to write to the console
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    # use a simple message format
    log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    

    log4j.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
       <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
      </appender>
        <logger name="org.apache.spark">
            <level value="error" />
        </logger>
        <logger name="org.spark-project">
            <level value="error" />
        </logger>
        <logger name="org.apache.hadoop">
            <level value="error" />
        </logger>
        <logger name="io.netty">
            <level value="error" />
        </logger>
        <logger name="org.apache.zookeeper">
            <level value="error" />
        </logger>
       <logger name="org">
            <level value="error" />
        </logger>
        <root>
            <priority value ="ERROR" />
            <appender-ref ref="console" />
        </root>
    </log4j:configuration>

    Switch to FileAppender in log4j.xml if you want to write logs to file instead of console. LOG_DIR is a variable for logs directory which you can supply using spark-submit --conf "spark.driver.extraJavaOptions=-D.

    <appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
            <param name="file" value="${LOG_DIR}"/>
            <param name="datePattern" value="'.'yyyy-MM-dd"/>
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
            </layout>
        </appender>

    Another important thing to understand here is, when job is launched in distributed mode ( deploy-mode cluster and master as yarn or mesos) the log4j configuration file should exist on driver and worker nodes (log4j.configuration=file:<file path>/log4j.xml) else log4j init will complain-

    log4j:ERROR Could not read configuration file [log4j.properties]. java.io.FileNotFoundException: log4j.properties (No such file or directory)

    Hint on solving this problem-

    Keep log4j config file in distributed file system(HDFS or mesos) and add external configuration using log4j PropertyConfigurator. or use sparkContext addFile to make it available on each node then use log4j PropertyConfigurator to reload configuration.

    0 讨论(0)
  • 2020-11-22 14:25

    If anyone else is stuck on this,

    nothing of the above worked for me. I had to remove

    implementation group: "ch.qos.logback", name: "logback-classic", version: "1.2.3"
    implementation group: 'com.typesafe.scala-logging', name: "scala-logging_$scalaVersion", version: '3.9.2'
    

    from my build.gradle for the logs to disappear. TLDR: Don't import any other logging frameworks, you should be fine just using org.apache.log4j.Logger

    0 讨论(0)
  • 2020-11-22 14:26

    Right after starting spark-shell type ;

    sc.setLogLevel("ERROR")
    

    In Spark 2.0 (Scala):

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

    API Docs : https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.sql.SparkSession

    For Java:

    spark = SparkSession.builder.getOrCreate();
    spark.sparkContext().setLogLevel("ERROR");
    
    0 讨论(0)
  • 2020-11-22 14:31

    Simply add below param to your spark-shell OR spark-submit command

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

    Check exact property name (log4jspark.root.logger here) from log4j.properties file. Hope this helps, cheers!

    0 讨论(0)
  • 2020-11-22 14:34

    You set disable the Logs by setting its level to OFF as follows:

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

    or edit log file and set log level to off by just changing the following property:

    log4j.rootCategory=OFF, console
    
    0 讨论(0)
  • 2020-11-22 14:35

    Answers above are correct but didn't exactly help me as there was additional information I required.

    I have just setup Spark so the log4j file still had the '.template' suffix and wasn't being read. I believe that logging then defaults to Spark core logging conf.

    So if you are like me and find that the answers above didn't help, then maybe you too have to remove the '.template' suffix from your log4j conf file and then the above works perfectly!

    http://apache-spark-user-list.1001560.n3.nabble.com/disable-log4j-for-spark-shell-td11278.html

    0 讨论(0)
提交回复
热议问题