例とともに収集されたすべてのメソッド
はじめに
実際には、さまざまな方法があります。いくつかは他のものよりも難しいですが、どれがあなたに最も適しているかはあなた次第です。私はそれらすべてを紹介しようとします。
アプリでプログラム的に#1
最も簡単なようですが、これらの設定を変更するには、アプリを再コンパイルする必要があります。個人的には嫌いですがうまくいきます。
例:
import org.apache.log4j.{Level, Logger}
val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.spark-project").setLevel(Level.WARN)
log4j
API を使用するだけで、さらに多くのことを実現できます。
出典:[ Log4J構成ドキュメント、構成セクション]
#2パスlog4j.properties
中spark-submit
これは非常にトリッキーですが、不可能ではありません。そして、私のお気に入り。
アプリの起動中のLog4Jは、常にlog4j.properties
クラスパスからファイルを探してロードしています。
ただし、spark-submit
Spark Clusterのクラスパスを使用すると、アプリのクラスパスよりも優先されます。このため、このファイルをfat-jarに配置しても、クラスターの設定は上書きされません。
(ドライバーの場合)または(エグゼキューターの場合)に追加-Dlog4j.configuration=<location of configuration file>
し
ます。spark.driver.extraJavaOptions
spark.executor.extraJavaOptions
ファイルを使用する場合は、file:
プロトコルを明示的に指定する必要があり、ファイルはすべてのノードにローカルに存在する必要があることに注意してください。
最後の条件を満たすには、ノードの使用可能な場所(などhdfs
)にファイルをアップロードするか、を使用している場合はドライバーを使用してローカルにアクセスしdeploy-mode client
ます。さもないと:
アプリケーションでアップロードするファイルlog4j.properties
の--files
リストに追加することにより、spark-submitを使用してカスタムをアップロードします。
出典:Spark docs、Debugging
手順:
例log4j.properties
:
# Blacklist all to warn level
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
# Whitelist our app to info :)
log4j.logger.com.github.atais=INFO
実行spark-submit
中、クラスターモードの場合:
spark-submit \
--master yarn \
--deploy-mode cluster \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
モードを使用する--driver-java-options
場合は、使用する必要があることに注意してclient
ください。Spark docs、ランタイム環境
実行spark-submit
中、クライアントモードの場合:
spark-submit \
--master yarn \
--deploy-mode client \
--driver-java-options "-Dlog4j.configuration=file:/absolute/path/to/your/log4j.properties \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
ノート:
- アップロードされたファイル
spark-cluster
では--files
、ルートディレクトリで利用できるようになり、その内の任意のパスを追加する必要はありませんfile:log4j.properties
。
- にリストされているファイルに
--files
は絶対パスを指定する必要があります!
file:
構成URIのプレフィックスは必須です。
#3クラスタの編集 conf/log4j.properties
これにより、グローバルログ設定ファイルが変更されます。
$SPARK_CONF_DIR/log4j.properties
ファイルを更新すると、他の構成とともに自動的にアップロードされます。
出典:Spark docs、Debugging
あなたを見つけるためにSPARK_CONF_DIR
あなたは使うことができますspark-shell
:
atais@cluster:~$ spark-shell
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.1.1
/_/
scala> System.getenv("SPARK_CONF_DIR")
res0: String = /var/lib/spark/latest/conf
ここで/var/lib/spark/latest/conf/log4j.properties
(メソッド#2の例を使用して)編集するだけで、すべてのアプリがこの構成を共有します。
#4設定ディレクトリを上書きする
ソリューション#3が気に入ったが、アプリケーションごとにカスタマイズしたい場合は、実際にconf
フォルダーをコピーし、その内容を編集して、中にルート構成として指定できますspark-submit
。
デフォルト以外の別の設定ディレクトリを指定するために、設定“SPARK_HOME/conf”
できますSPARK_CONF_DIR
。スパークは、コンフィギュレーション・ファイル(使用するspark-defaults.conf
、spark-env.sh
、log4j.properties
、などをこのディレクトリから)。
出典:Spark docs、Configuration
手順:
- クラスターの
conf
フォルダーをコピーする(詳細、方法#3)
log4j.properties
そのフォルダーで編集する(方法#2の例)
をSPARK_CONF_DIR
実行する前に、このフォルダに設定しますspark-submit
。
例:
export SPARK_CONF_DIR=/absolute/path/to/custom/conf
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.github.atais.Main \
"SparkApp.jar"
結論
他の方法があるかどうかはわかりませんが、これでAからZまでのトピックがカバーされることを願っています。ない場合は、コメントで遠慮なくpingしてください。
楽しみましょう!