-Dパラメーターまたは環境変数をSparkジョブに渡す方法は?


83

dev / prod環境でSparkジョブのTypesafe構成を変更したい。これを達成する最も簡単な方法は-Dconfig.resource=ENVNAME、仕事に転職することだと私には思えます。その後、Typesafe構成ライブラリが私のために仕事をします。

そのオプションを直接ジョブに渡す方法はありますか?または、実行時にジョブ構成を変更するためのより良い方法がありますか?

編集:

  • spark-submitコマンドに--conf "spark.executor.extraJavaOptions=-Dconfig.resource=dev"オプションを追加しても何も起こりません。
  • spark-submitコマンドError: Unrecognized option '-Dconfig.resource=dev'.に渡し-Dconfig.resource=devたときに取得しました。

1
仕事をどのように始めているかを明記してください。一般-Dx=yに、コマンドラインに固執することができます。
ダニエルダラボス2015年

@DanielDarabos私はYARNでspark-submitから仕事を始めます。
kopiczko 2015年

@kopiczko答えを受け入れてもらえますか?
ドンブランソン2017年

@DonBransonここですべての答えを試しましたが、spark1.6.0でうまくいったものはありませんでした。私はこの正確な問題を抱えています。Typesafe構成構成ファイルの構成プロパティを-Dパラメーターでオーバーライドできないようです。
nemo 2017

@kopiczko解決策を見つけることができましたか?
nemo

回答:


58

spark-submit次の3つのオプションを追加してコマンドラインを変更します。

  • --files <location_to_your_app.conf>
  • --conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'
  • --conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'

19
この--conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'オプションの使用は、sparkがクライアントモードでドライバーを送信する場合は機能しないことに注意してください。--driver-java-options "-Dconfig.resource=app"代わりに使用してください。Spark構成を参照してください。
ヨーヨー2016年

2
糸Iに使用: ファイルには、実行プログラムに名前を相対的に示します。そのため、指定されたファイルはapplication.confとして表示されます。--files <location_to_your.conf>#application.conf --driver-java-options -Dconfig.file=your.conf#
vpipkt 2017年

またはspark-submit --driver-java-options='-Dmy.config.path=myConfigValue'
Jean-Adrien 2017

@kopiczkoこれは私にとってはうまくいきません...これはあなたの問題を解決しましたか?
nemo 2017

それは2015年に私のために働いていました。ATM私はそれがどんなSparkバージョンであったかさえわかりません。
kopiczko 2017

21

これが追加のJavaオプションで実行された私のsparkプログラムです

/home/spark/spark-1.6.1-bin-hadoop2.6/bin/spark-submit \
--files /home/spark/jobs/fact_stats_ad.conf \
--conf spark.executor.extraJavaOptions=-Dconfig.fuction.conf \
--conf 'spark.driver.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH -Dalluxio.user.file.write.location.policy.class=alluxio.client.file.policy.MostAvailableFirstPolicy -Dconfig.file=/home/spark/jobs/fact_stats_ad.conf' \
--class jobs.DiskDailyJob \
--packages com.databricks:spark-csv_2.10:1.4.0 \
--jars /home/spark/jobs/alluxio-core-client-1.2.0-RC2-jar-with-dependencies.jar \
--driver-memory 2g \
/home/spark/jobs/convert_to_parquet.jar \
AD_COOKIE_REPORT FACT_AD_STATS_DAILY | tee /data/fact_ad_stats_daily.log

あなたがカスタム設定ファイルを見ることができるように --files /home/spark/jobs/fact_stats_ad.conf

エグゼキュータJavaオプション --conf spark.executor.extraJavaOptions=-Dconfig.fuction.conf

ドライバーのJavaオプション。 --conf 'spark.driver.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH -Dalluxio.user.file.write.location.policy.class=alluxio.client.file.policy.MostAvailableFirstPolicy -Dconfig.file=/home/spark/jobs/fact_stats_ad.conf'

それが役立つことを願っています。


この回答は、複数のオプションをスペースで区切った-Dkey = valueペアのリストとして渡すための形式を示すのに役立ちます。
ポール

9

-DパラメーターをSparkエグゼキューターとドライバーに渡す際に多くの問題が発生したため、ブログ投稿から引用を追加しました。「パラメーターを渡す正しい方法は、プロパティ「spark.driver.extraJavaOptions」と「spark.executor.extraJavaOptions」を使用することです。 log4J構成プロパティと構成に必要なパラメーターの両方を渡しました(ドライバーにはlog4j構成のみを渡すことができました)。たとえば、(spark-submitで渡されたプロパティファイルに「—プロパティファイル」):「

spark.driver.extraJavaOptions –Dlog4j.configuration=file:///spark/conf/log4j.properties -
spark.executor.extraJavaOptions –Dlog4j.configuration=file:///spark/conf/log4j.properties -Dapplication.properties.file=hdfs:///some/path/on/hdfs/app.properties
spark.application.properties.file hdfs:///some/path/on/hdfs/app.properties

「「

Sparkの全体的な構成に関する私のブログ投稿を読むことができます。私もYarnで走っています。


それにいくつかのコンテンツを追加し、リンクのみの回答を避けてください。
Ajay Gupta 2015

7

--files <location_to_your_app.conf> --conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app' --conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'

このように書くと、後の方--confが前の方を上書きしEnvironmentます。タブの下でジョブが開始された後にsparkUIを確認することでこれを確認できます。

したがって、正しい方法は、次のようにオプションを同じ行の下に配置する --conf 'spark.executor.extraJavaOptions=-Da=b -Dc=d' ことです。これを行うと、すべての設定がsparkUIの下に表示されます。


これは「--conf」フラグには当てはまらないと思いますが、「-files」には当てはまります。
半影2017年

2.1.0と2.1.1でテストしました。sparkUI-> Environmentによると、--conf2回使用した場合にのみ後者が表示されます。
linehrr 2017年

1
あなたの例には欠陥があると思います。「--conf」フラグの後に、2つの別個の完全に異なるキー/値(1つのエグゼキュータ、1つのドライバ)が表示されています。それらは互いに上書きすることはできません。--confオプションの最後の繰り返しのみが有効になると言っている場合、あなたは正しいですが、あなたの例はそれを示していません。spark-submitの場合:-1つの--filesオプションを使用でき、最後の(複数の場合)が使用され、前のオプションは無視されます-複数の--conf key = valueオプションを使用できますが、キーを複製する場合最後の値を取ります
Penumbra 2017

3

別のScalaアプリケーション内から起動されたspark-submitコマンドを介してSparkアプリケーションを起動しています。だから私はのような配列を持っています

Array(".../spark-submit", ..., "--conf", confValues, ...)

ここconfValuesで:

  • 以下のためのyarn-clusterモード:
    "spark.driver.extraJavaOptions=-Drun.mode=production -Dapp.param=..."
  • 以下のためのlocal[*]モード:
    "run.mode=development"

ただし、引用符とスペースをエスケープする(しない)場所を理解するのは少し難しいです。システムプロパティ値については、SparkWebインターフェイスを確認できます。


これは私のために働いた!(少なくともlocal[*]モードでは)。yarn-clusterモードを試してコメントを更新します(忘れない場合は..:D)
acidghost 2015年

3
spark-submit --driver-java-options "-Denv=DEV -Dmode=local" --class co.xxx.datapipeline.jobs.EventlogAggregator target/datapipeline-jobs-1.0-SNAPSHOT.jar

上記のコマンドは私のために働きます:

-Denv=DEV=> DEV envプロパティファイルを読み取り、
-Dmode=local=>ローカルにSparkContextを作成します-.setMaster( "local [*]")


0

以下のコマンドのような方法を使用してください、あなたに役立つかもしれません-

spark-submit --master local [2] --conf'spark.driver.extraJavaOptions = Dlog4j.configuration = file:/tmp/log4j.properties '--conf'spark.executor.extraJavaOptions = -Dlog4j.configuration = file: /tmp/log4j.properties'--class com.test.spark.application.TestSparkJob target / application-0.0.1-SNAPSHOT-jar-with-dependencies.jar prod

私は試しましたが、うまくいきました。本当に役立つスパーク投稿の下の見出しも確認することをお勧めします -https://spark.apache.org/docs/latest/running-on-yarn.html


0

私はもともとこの設定ファイルを持っていました:

my-app {
  environment: dev
  other: xxx
}

これが私のsparkscalaコードに設定をロードする方法です:

val config = ConfigFactory.parseFile(File<"my-app.conf">)
  .withFallback(ConfigFactory.load())
  .resolve
  .getConfig("my-app")

この設定では、Typesafe Configのドキュメントや他のすべての回答にあるように、次のようにsparkジョブを起動したときにシステムプロパティのオーバーライドが機能しませんでした。

spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --name my-app \
  --driver-java-options='-XX:MaxPermSize=256M -Dmy-app.environment=prod' \
  --files my-app.conf \
  my-app.jar

それを機能させるには、設定ファイルを次のように変更する必要がありました。

my-app {
  environment: dev
  environment: ${?env.override}
  other: xxx
}

そして、次のように起動します。

spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --name my-app \
  --driver-java-options='-XX:MaxPermSize=256M -Denv.override=prod' \
  --files my-app.conf \
  my-app.jar

私はspark1.6.0 BTWを実行しています
nemo 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.