170

AWS EC2 ガイドを使用して Spark をインストールしました。bin/pysparkスクリプトを使用してプログラムを正常に起動し、spark プロンプトに到達し、クイック スタート クイックも正常に実行できました。

INFOただし、各コマンドの後にすべての詳細ログを停止する方法を理解することはできません。

以下のコード (コメントアウト、OFF に設定) でほぼすべての可能なシナリオを試しましたが、アプリケーションを起動log4j.propertiesするフォルダー内のファイル内confと各ノードで何も実行していません。各ステートメントを実行した後でも、ロギングINFOステートメントが出力されます。

これがどのように機能するはずなのか、私は非常に混乱しています。

#Set everything to be logged to the console log4j.rootCategory=INFO, 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.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

を使用するときの完全なクラスパスは次のSPARK_PRINT_LAUNCH_COMMANDとおりです。

Spark コマンド: /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java -cp :/root/spark-1.0.1-bin-hadoop2/conf:/root/spark-1.0.1 -bin-hadoop2/conf:/root/spark-1.0.1-bin-hadoop2/lib/spark-assembly-1.0.1-hadoop2.2.0.jar:/root/spark-1.0.1-bin-hadoop2/lib /datanucleus-api-jdo-3.2.1.jar:/root/spark-1.0.1-bin-hadoop2/lib/datanucleus-core-3.2.2.jar:/root/spark-1.0.1-bin-hadoop2 /lib/datanucleus-rdbms-3.2.1.jar -XX:MaxPermSize=128m -Djava.library.path= -Xms512m -Xmx512m org.apache.spark.deploy.SparkSubmit spark-shell --class org.apache.spark. repl.Main

の内容spark-env.sh:

#!/usr/bin/env bash

# This file is sourced when running various Spark programs.
# Copy it as spark-env.sh and edit that to configure Spark for your site.

# Options read when launching programs locally with 
# ./bin/run-example or ./bin/spark-submit
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public dns name of the driver program
# - SPARK_CLASSPATH=/root/spark-1.0.1-bin-hadoop2/conf/

# Options read by executors and drivers running inside the cluster
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public DNS name of the driver program
# - SPARK_CLASSPATH, default classpath entries to append
# - SPARK_LOCAL_DIRS, storage directories to use on this node for shuffle and RDD data
# - MESOS_NATIVE_LIBRARY, to point to your libmesos.so if you use Mesos

# Options read in YARN client mode
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_EXECUTOR_INSTANCES, Number of workers to start (Default: 2)
# - SPARK_EXECUTOR_CORES, Number of cores for the workers (Default: 1).
# - SPARK_EXECUTOR_MEMORY, Memory per Worker (e.g. 1000M, 2G) (Default: 1G)
# - SPARK_DRIVER_MEMORY, Memory for Master (e.g. 1000M, 2G) (Default: 512 Mb)
# - SPARK_YARN_APP_NAME, The name of your application (Default: Spark)
# - SPARK_YARN_QUEUE, The hadoop queue to use for allocation requests (Default: ‘default’)
# - SPARK_YARN_DIST_FILES, Comma separated list of files to be distributed with the job.
# - SPARK_YARN_DIST_ARCHIVES, Comma separated list of archives to be distributed with the job.

# Options for the daemons used in the standalone deploy mode:
# - SPARK_MASTER_IP, to bind the master to a different IP address or hostname
# - SPARK_MASTER_PORT / SPARK_MASTER_WEBUI_PORT, to use non-default ports for the master
# - SPARK_MASTER_OPTS, to set config properties only for the master (e.g. "-Dx=y")
# - SPARK_WORKER_CORES, to set the number of cores to use on this machine
# - SPARK_WORKER_MEMORY, to set how much total memory workers have to give executors (e.g. 1000m, 2g)
# - SPARK_WORKER_PORT / SPARK_WORKER_WEBUI_PORT, to use non-default ports for the worker
# - SPARK_WORKER_INSTANCES, to set the number of worker processes per node
# - SPARK_WORKER_DIR, to set the working directory of worker processes
# - SPARK_WORKER_OPTS, to set config properties only for the worker (e.g. "-Dx=y")
# - SPARK_HISTORY_OPTS, to set config properties only for the history server (e.g. "-Dx=y")
# - SPARK_DAEMON_JAVA_OPTS, to set config properties for all daemons (e.g. "-Dx=y")
# - SPARK_PUBLIC_DNS, to set the public dns name of the master or workers

export SPARK_SUBMIT_CLASSPATH="$FWDIR/conf"
4

16 に答える 16

37

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)

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

于 2015-01-07T08:44:50.887 に答える
31

PySpark の場合、スクリプトでログ レベルを設定することもできますsc.setLogLevel("FATAL")ドキュメントから:

logLevel を制御します。これにより、ユーザー定義のログ設定が上書きされます。有効なログ レベルには、ALL、DEBUG、ERROR、FATAL、INFO、OFF、TRACE、WARN があります。

于 2016-04-26T23:52:36.297 に答える
14

これは、Spark がそのクラスパスを計算する方法が原因である可能性があります。クラスパス上で Hadoop のlog4j.propertiesファイルが Spark のファイルより前に表示され、変更が有効にならないというのが私の推測です。

あなたが実行する場合

SPARK_PRINT_LAUNCH_COMMAND=1 bin/spark-shell

次に、Spark はシェルの起動に使用される完全なクラスパスを出力します。私の場合、わかります

Spark Command: /usr/lib/jvm/java/bin/java -cp :::/root/ephemeral-hdfs/conf:/root/spark/conf:/root/spark/lib/spark-assembly-1.0.0-hadoop1.0.4.jar:/root/spark/lib/datanucleus-api-jdo-3.2.1.jar:/root/spark/lib/datanucleus-core-3.2.2.jar:/root/spark/lib/datanucleus-rdbms-3.2.1.jar -XX:MaxPermSize=128m -Djava.library.path=:/root/ephemeral-hdfs/lib/native/ -Xms512m -Xmx512m org.apache.spark.deploy.SparkSubmit spark-shell --class org.apache.spark.repl.Main

/root/ephemeral-hdfs/confクラスパスの先頭にあります。

次のリリースでこれを修正するために問題 [SPARK-2913]をオープンしました (すぐにパッチをリリースする必要があります)。

それまでの間、いくつかの回避策があります。

  • に追加export SPARK_SUBMIT_CLASSPATH="$FWDIR/conf"spark-env.shます。
  • 削除 (または名前を変更) し/root/ephemeral-hdfs/conf/log4j.propertiesます。
于 2014-08-08T00:11:41.663 に答える
10

プログラマティックな方法

spark.sparkContext.setLogLevel("WARN")

利用可能なオプション

ERROR
WARN 
INFO 
于 2019-07-08T16:14:22.560 に答える
2

以下は、scala ユーザー向けのコード スニペットです。

オプション1 :

ファイルレベルで追加できるスニペットの下

import org.apache.log4j.{Level, Logger}
Logger.getLogger("org").setLevel(Level.WARN)

オプション 2 :

注 : これは、spark セッションを使用しているすべてのアプリケーションに適用されます。

import org.apache.spark.sql.SparkSession

  private[this] implicit val spark = SparkSession.builder().master("local[*]").getOrCreate()

spark.sparkContext.setLogLevel("WARN")

オプション 3 :

注 : この構成は、log4j.properties.. (/etc/spark/conf/log4j.properties (spark のインストールがある場所) またはプロジェクト フォルダー レベルの log4j.properties のようになる可能性があります) に追加する必要があります。モジュールレベル。これは、すべてのアプリケーションに適用されます。

log4j.rootCategory=ERROR, console

私見、オプション1はファイルレベルでオフにできるため、賢明な方法です。

于 2019-05-10T23:19:07.237 に答える
0

ロギング (Python のロギング機能) を引き続き使用したい場合は、アプリケーションと Spark の構成を分割してみてください。

LoggerManager()
logger = logging.getLogger(__name__)
loggerSpark = logging.getLogger('py4j')
loggerSpark.setLevel('WARNING')
于 2016-05-03T14:43:11.533 に答える