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

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

我怎么阻止这些?


当前回答

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

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

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

其他回答

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

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

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

log4j.rootCategory=OFF, console

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

在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'后 通过以下方式调用此函数:

启动后立即火花弹型;

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");

这个方法对我很管用。 对于仅显示为stdout的ERROR消息,请使用log4j。属性文件可能如下所示:

# Root logger option
log4j.rootLogger=ERROR, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

注意:输入log4j。src/main/resources文件夹中的属性文件 有效。 如果log4j。属性不存在(意味着spark正在使用log4j-defaults)。然后你可以通过SPARK_HOME/conf和mv log4j.properties来创建它。模板log4j。属性,然后继续上述更改。