208

spark 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

これらを停止するにはどうすればよいですか?

4

21 に答える 21

191

ファイルを編集してconf/log4j.properties、次の行を変更します。

log4j.rootCategory=INFO, console

log4j.rootCategory=ERROR, console

別のアプローチは次のとおりです。

spark-shell を起動し、次のように入力します。

import org.apache.log4j.Logger
import org.apache.log4j.Level

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

その後、ログは表示されません。

レベルのその他のオプションにはalldebugerrorfatalinfoofftracetrace_intwarn

それぞれの詳細については、ドキュメントを参照してください。

于 2015-01-07T08:48:04.860 に答える
180

spark-shelltype ; を開始した直後

sc.setLogLevel("ERROR")

Spark 2.0 (Scala) では:

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

API ドキュメント : https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.sql.SparkSession

Java の場合:

spark = SparkSession.builder.getOrCreate();
spark.sparkContext().setLogLevel("ERROR");
于 2016-06-15T13:27:04.273 に答える
49

ファイルの変更を提案してくれた@AkhlDと@Sachin Jananiに感謝し.confます。

次のコードは私の問題を解決しました:

import org.apache.log4j.{Level, Logger}1)インポートセクションに追加

2) スパークコンテキストオブジェクトの作成後、つまり後に次の行を追加しましたval sc = new SparkContext(conf):

val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)
于 2015-12-16T07:31:43.147 に答える
19

次のようにログのレベルを OFF に設定して、ログを無効に設定します。

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

または、ログ ファイルを編集し、次のプロパティを変更するだけでログ レベルをオフに設定します。

log4j.rootCategory=OFF, console
于 2015-01-05T14:13:46.013 に答える
5

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 )

于 2016-04-04T21:22:54.090 に答える
5

tl;dr

Spark コンテキストの場合、次を使用できます。

sc.setLogLevel(<logLevel>)

ここでloglevel、ALL、DEBUG、ERROR、FATAL、INFO、OFF、TRACE、または WARN を指定できます。


詳細-

内部的には、それを使用して set using をsetLogLevel呼び出します。org.apache.log4j.Level.toLevel(logLevel)org.apache.log4j.LogManager.getRootLogger().setLevel(level)

OFF以下を使用してログレベルを直接設定できます。

LogManager.getLogger("org").setLevel(Level.OFF)

で、Spark シェルの既定のログ記録を設定できますconf/log4j.propertiesconf/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)

ロギングの無効化 (log4j で):

conf/log4j.propertiesロギングを完全に無効にするには、以下を使用します。

log4j.logger.org=OFF

参照: Jacek Laskowski による Mastering Spark。

于 2017-11-12T06:41:14.087 に答える
3

PySpark に以下を追加すると、うまくいきました。

self.spark.sparkContext.setLogLevel("ERROR")

self.spark はスパークセッションです ( self.spark = spark_builder.getOrCreate())

于 2020-11-30T05:26:18.390 に答える
2

興味深いアイデアは、ここで提案されているように RollingAppender を使用することです : 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

原因を解決する別の方法は、通常、どのような種類のログ (さまざまなモジュールと依存関係からのもの) を観察し、ログの粒度をそれぞれに設定し、冗長すぎる「静かな」サード パーティ ログを有効にすることです。

例えば、

    # 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
于 2015-10-13T08:24:29.710 に答える
0
sparkContext.setLogLevel("OFF")
于 2016-12-16T15:53:04.583 に答える