2017-05-19 6 views
2

EMRクラスタでスパークジョブを実行しようとしています。Amazon EMRへのスパーク送信時にカスタムlog4j.configurationの場所を指定する方法は?

私は、私はlog4j.properties

--files log4j.properties --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/log4j.properties" 

から読み取るのconfigsを追加した火花提出また、私は私のlog4j構成で

log4j.rootLogger=INFO, file 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=/log/test.log 
log4j.appender.file.MaxFileSize=10MB 
log4j.appender.file.MaxBackupIndex=10 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %5p %c{7} - %m%n 

を追加しました。

私は生成されたログファイルが表示されませんがとにかく私は、コンソールでログを参照してください。私はここで間違って何をしていますか? spark-submit --helpを引用

答えて

2

は、各エグゼキュータの作業ディレクトリに配置するファイルのFILESカンマ区切りリストを--files。エグゼキュータのこれらのファイルのファイルパスはSparkFiles.get(fileName)でアクセスできます。ずっとあなたがSparkFiles.get(fileName)を使用できない場合FILESをどうするかを言うことはありません

(これを使用することができませんlog4jのため)。 SparkFiles.getさんscaladoc引用

は、ファイルの絶対パスを取得するには、SparkContext.addFile()を介して追加しました。

def get(filename: String): String = 
    new File(getRootDirectory(), filename).getAbsolutePath() 

それについての素晴らしい事は、そのgetRootDirectory()uses an optional property or just the current working directory次のとおりです:

def getRootDirectory(): String = 
    SparkEnv.get.driverTmpDir.getOrElse(".") 

いずれかずっとあなたを与えるが、source code of SparkFiles.getを見てするを示唆していない

それは何かを働かせるように、それはありませんか?いわゆるdriverTmpDirディレクトリは、Web UIの[環境]タブで見つけるのは簡単であるべきドライバで

spark.filesプロパティまたはクラスパスエントリのSparkプロパティの下には、[ソース]列に「ユーザーが追加した」としてマークされています)。執行上

、私はは私が(

-Dlog4j.configuration=file://./log4j.properties 

または

-Dlog4j.configuration=file:log4j.properties 

ノートにローカルの作業ディレクトリを指定するには、ドットを使用したいローカルディレクトリを前提とそうではなく、file:/log4j.propertiesを使用していただきたいです最初のオプション)または後者でない主要/(中)。

は、それはあなたがまだについては考えていない何かだ場合についてspark.driver.extraJavaOptionsはドライバーのJavaオプションを設定することを忘れないでください。あなただけのこれまでの執行に焦点を当ててきました。

-Dlog4j.debug=truespark.executor.extraJavaOptionsを追加すると、log4jが使用する場所を印刷してlog4j.propertiesとすることができます。


私は自分自身をEMRまたはYARNクラスタ上でその答えをチェックするが、どこの答えを見つけるためにあなたにいくつかのヒントを与えている可能性があることを信じていません。 指が交差しました!

+0

火花提出--class com.myapp.cloud.app.UPApp --master糸--deployモードクライアントを--driver・メモリ4Gの--executorメモリ2グラム--executor-コア8 --filesのlog4j .properties --conf "spark.executor.extraJavaOptions = -Dlog4j.configuration = file://./log4j.properties" --conf "spark.eventLog.dir =/mnt/var/log /" uber-up-0.0 .1.jar私はまだこれを実行しようとしています。場所/log/test.logに作成されたログファイルは表示されません。 –

0

は、ここで私はEMRで私のユーバー-jarファイルを実行するために使用される完全なコマンドであると私はドライバとエグゼキュータのノードで生成されたログファイルを参照してください。

spark-submit --class com.myapp.cloud.app.UPApp - マスター糸 - デプロイモードクライアント - ドライバメモリ4g --executor-memory 2g --executor-core 8 --files log4j.properties -Dlog4j.debug =真:「spark.driver.extraJavaOptions = -Dlog4j.configuration =ファイル--conf: "log4j.properties spark.executor.extraJavaOptions = -Dlog4j.configuration =ファイル" --conf log4j.properties " - conf" spark.executor.extraJavaOptions = -Dlog4j.configuration = file:log4j.properties "--conf" spark.eventLog.dir =/mnt/var/log/"uber-up-0.0.1.jar

log4j.propertiesはローカルファイルシステムにあります。

関連する問題