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

我尝试编辑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

我怎么阻止这些?


当前回答

博士tl;

对于Spark Context,您可以使用: sc.setLogLevel (< logLevel >) 其中loglevel可以是ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE或 警告。


细节- - - - - -

在内部,setLogLevel调用org.apache.log4j.Level.toLevel(logLevel),然后使用org.apache.log4j.LogManager.getRootLogger(). setlevel (level)进行设置。

您可以使用以下方法直接将日志级别设置为OFF: LogManager.getLogger(“org”).setLevel (Level.OFF)

您可以在conf/log4j.properties中设置Spark shell的默认日志记录。使用conf / log4j . properties。模板作为起点。

在Spark应用程序中设置日志级别

在独立的Spark应用程序中或在Spark Shell会话中,使用以下命令:

import org.apache.log4j.{Level, Logger}

Logger.getLogger(classOf[RackResolver]).getLevel
Logger.getLogger("org").setLevel(Level.OFF)
Logger.getLogger("akka").setLevel(Level.OFF)

禁用日志记录(在log4j中):

在conf/log4j中使用以下命令。属性完全禁用日志记录:

log4j.logger.org=OFF

参考:Jacek Laskowski的Mastering Spark。

其他回答

感谢@AkhlD和@Sachin Janani建议修改.conf文件。

以下代码解决了我的问题:

1)增加了导入org.apache.log4j。导入部分中的{级别,日志记录器}

2)在创建spark context对象后添加如下一行,即在val sc = new SparkContext(conf)后:

val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)

启动后立即火花弹型;

sc.setLogLevel("ERROR")

你可以把它放在预加载文件中,像这样使用:

spark-shell ... -I preload-file ...

在Spark 2.0 (Scala)中:

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

你的码头:HTTP:// spark.ap.org。

对于Java:

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

在命令行上很简单…

spark2-submit——driver-java-options = " -Droot。记录器=错误控制台”. .其他选项。

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

    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)

如果您没有编辑java代码来插入. setloglevel()语句的能力,并且您不希望部署更多的外部文件,那么您可以使用暴力方法来解决这个问题。只需使用grep过滤掉INFO行。

spark-submit --deploy-mode client --master local <rest-of-cmd> | grep -v -F "INFO"