2016-10-21 17 views
3

開発中にsparkジョブを「クライアント」モードで実行していました。私は "--file"を使って設定ファイルをエグゼキュータと共有します。ドライバは設定ファイルをローカルで読み込んでいました。今私は "クラスタ"モードでジョブを展開したい。私は現在、ドライバと設定ファイルを共有するのが難しいです。クラスタモードでspark-submitを使用して設定ファイルを共有する

私は、extraJavaOptionsとして設定ファイル名をドライバとエグゼキュータの両方に渡しています。私は、これは執行にうまく動作しますが、ドライバーに失敗し

val configFile = org.apache.spark.SparkFiles.get(System.getProperty("config.file.name")) 

)(SparkFiles.getを使用してファイルを読んでいます。ファイルはエグゼキュータと共有されるだけで、ドライバが実行されているコンテナとは共有されないと思います。 オプションの1つは、S3に設定ファイルを保存することです。私はspark-submitを使ってこれが達成できるかどうかを確認したかったのです。

> spark-submit --deploy-mode cluster --master yarn --driver-cores 2 
> --driver-memory 4g --num-executors 4 --executor-cores 4 --executor-memory 10g \ 
> --files /home/hadoop/Streaming.conf,/home/hadoop/log4j.properties \ 
> --conf **spark.driver.extraJavaOptions**="-Dlog4j.configuration=log4j.properties 
> -Dconfig.file.name=Streaming.conf" \ 
> --conf **spark.executor.extraJavaOptions**="-Dlog4j.configuration=log4j.properties 
> -Dconfig.file.name=Streaming.conf" \ 
> --class .... 

答えて

1

spark submitコマンドで--properties-fileオプションを試す必要があります。

たとえばプロパティはすべてのキー

spark.key1=value1 
spark.key2=value2 

コンテンツファイルはsparkprefixedする必要があります。

このようにspark-submitコマンドを使用して、プロパティファイルを渡します。

bin/spark-submit --properties-file propertiesfile.properties 

その後のコードで、あなたはsparkcontext getConf法の下に使用して、キーを取得することができます。

​​

キー値を取得したら、どこでも使用できます。

+1

ありがとうございました! 私はすでに別のフォーマット(typesafe config)で設定ファイルを持っています。 configsをKVペアとしてファイルに入れるのではなく、構成を整理しておくことにはいくつかの利点があります。 設定ファイルをドライバと共有する方法はありませんか? – Cheeko

+0

@Cheeko:confファイルをDriverに共有するとどういう意味ですか? confファイルには何がありますか?あなたがエグゼキュータで読むことができる場合でも、なぜあなたはドライバでそれを読んでいませんか?ドライバで同じものを読んで、ブロードキャスト変数としてエグゼキュータに渡してください。それで、両方の場所で使うことができます。 – Shankar

+0

設定ファイルがすべてのノードからアクセス可能な場所にありません。ですから、私はファイルをすべてのエグゼキュータに渡すために--filesでspark-submitを使います。 --filesが "cluster"モードで別のノードを実行しているドライバにファイルを渡していないようです。 – Cheeko

関連する問題