開発中に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 ....
ありがとうございました! 私はすでに別のフォーマット(typesafe config)で設定ファイルを持っています。 configsをKVペアとしてファイルに入れるのではなく、構成を整理しておくことにはいくつかの利点があります。 設定ファイルをドライバと共有する方法はありませんか? – Cheeko
@Cheeko:confファイルをDriverに共有するとどういう意味ですか? confファイルには何がありますか?あなたがエグゼキュータで読むことができる場合でも、なぜあなたはドライバでそれを読んでいませんか?ドライバで同じものを読んで、ブロードキャスト変数としてエグゼキュータに渡してください。それで、両方の場所で使うことができます。 – Shankar
設定ファイルがすべてのノードからアクセス可能な場所にありません。ですから、私はファイルをすべてのエグゼキュータに渡すために--filesでspark-submitを使います。 --filesが "cluster"モードで別のノードを実行しているドライバにファイルを渡していないようです。 – Cheeko