如何停止火花控制台上显示的消息?

我想停止火花shell上的各种消息。

我试图编辑log4j.properties文件,以便停止这些消息。

这里是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 

我如何阻止这些?

编辑您的conf/log4j.properties文件并更改以下行:

 log4j.rootCategory=INFO, console 

 log4j.rootCategory=ERROR, console 

另一种方法是:

启动火花shell并input以下内容:

 import org.apache.log4j.Logger import org.apache.log4j.Level Logger.getLogger("org").setLevel(Level.OFF) Logger.getLogger("akka").setLevel(Level.OFF) 

之后你将不会看到任何日志。

Level的其他选项包括: alldebugerrorfatalinfoofftracetrace_intwarn

有关每个细节可以在文档中find。

启动spark-shelltypes之后

 sc.setLogLevel("ERROR") 

在Spark 2.0中:

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

感谢@AkhlD和@Sachin Jananibuild议在.conf文件中进行修改。

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

1)在导入部分添加了import org.apache.log4j.{Level, Logger}

2)在创buildspark上下文对象后添加下面的行,例如val sc = new SparkContext(conf)

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

您通过将其级别设置为OFF来设置禁用日志,如下所示:

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

或编辑日志文件,只需更改以下属性即可将日志级别设置为closures:

 log4j.rootCategory=OFF, console 

上面的答案是正确的,但没有完全帮助我,因为我需要额外的信息。

我刚刚设置了Spark,所以log4j文件仍然有'.template'后缀,并没有被读取。 我相信,日志logging默认为Spark核心日志loggingconf。

所以,如果你像我一样,发现上面的答案没有帮助,那么也许你也必须从你的log4j conf文件中删除'.template'后缀,然后上面的作品完美!

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

在使用spark-submit或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" 

Log4j.properties:

 log4j.rootLogger=ERROR, console # set the log level for these components log4j.logger.com.test=DEBUG 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> <root> <priority value ="ERROR" /> <appender-ref ref="console" /> </root> </log4j:configuration> 

一个有趣的想法是使用RollingAppenderbuild议在这里: http ://shzhangji.com/blog/2015/05/31/spark-streaming-logging-configuration/,以便您不“监视”控制台空间,但仍然能够看到$ YOUR_LOG_PATH_HERE / $ {dm.logging.name} .log下的结果。

  log4j.rootLogger=INFO, rolling log4j.appender.rolling=org.apache.log4j.RollingFileAppender log4j.appender.rolling.layout=org.apache.log4j.PatternLayout log4j.appender.rolling.layout.conversionPattern=[%d] %p %m (%c)%n log4j.appender.rolling.maxFileSize=50MB log4j.appender.rolling.maxBackupIndex=5 log4j.appender.rolling.file=$YOUR_LOG_PATH_HERE/${dm.logging.name}.log log4j.appender.rolling.encoding=UTF-8 

解决原因的另一种方法是观察通常有哪些日志logging(来自不同的模块和依赖关系),并为日志logging的每个粒度进行设置,同时将冗长的“安静”第三方日志转变为冗长:

例如,

  # Silence akka remoting log4j.logger.Remoting=ERROR log4j.logger.akka.event.slf4j=ERROR log4j.logger.org.spark-project.jetty.server=ERROR log4j.logger.org.apache.spark=ERROR log4j.logger.com.anjuke.dm=${dm.logging.level} 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 

在Python / Spark中,我们可以这样做:

 def quiet_logs( sc ): logger = sc._jvm.org.apache.log4j logger.LogManager.getLogger("org"). setLevel( logger.Level.ERROR ) logger.LogManager.getLogger("akka").setLevel( logger.Level.ERROR ) 

在定义Sparkcontaxt'sc'之后,通过下面的方法调用这个函数:quiet_logs(sc)

  1. 按其他log4j.rootCategory = ERROR,控制台所述调整conf / log4j.properties
  2. 确保在执行spark工作的同时传递带有log4j.properties文件path的文件标志
  3. 如果它仍然不起作用,你可能会有一个jar包,它会在新的log4j.properties之前调用log4j.properties。 从jar中删除log4j.properties(如果适用)
 sparkContext.setLogLevel("OFF") 

TL;博士

对于Spark上下文,你可以使用:

 sc.setLogLevel(<logLevel>) 

其中loglevel可以是ALL,DEBUG,ERROR,FATAL,INFO,OFF,TRACE或WARN。


细节-

在内部, 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的默认日志logging。 使用conf/log4j.properties.template作为起点。

在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) 

禁用日志logging(在log4j中):

conf/log4j.properties使用以下内容来完全禁用日志logging:

 log4j.logger.org=OFF 

参考:由Jacek Laskowski掌握Spark。