如何将-D参数或环境variables传递给Spark作业?

我想在dev / prod环境中更改Spark作业的Typesafeconfiguration 。 在我看来,最简单的方法是将-Dconfig.resource=ENVNAME传递给作业。 然后Typesafeconfiguration库将为我做这个工作。

有没有办法直接把这个选项传递给工作? 或者也许有更好的方法来改变运行时的作业configuration?

编辑:

  • 当我将--conf "spark.executor.extraJavaOptions=-Dconfig.resource=dev"选项添加到spark-submit命令时,没有任何反应。
  • 我得到Error: Unrecognized option '-Dconfig.resource=dev'. 当我通过-Dconfig.resource=dev火花提交命令。

更改spark-submit命令行添加三个选项:

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

这是我的火花程序运行添加Java选项

 /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 

你可以看到自定义的configuration文件--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'

希望它可以帮助。

我在传递-D参数来激发执行者和驱动程序方面遇到了很多问题,我从我的博客文章中添加了一个引用:“传递参数的正确方法是通过属性:” spark.driver.extraJavaOptions “和” spark.executor.extraJavaOptions “:我已经通过log4Jconfiguration属性和我需要的configuration参数(到驱动程序我只能通过log4jconfiguration)例如(写入属性文件传递在火花提交与“-properties文件”):“

 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 

你可以阅读我的博客文章关于火花的整体configuration。 我也在Yarn上跑步。

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

如果以这种方式写入,则later --conf将覆盖前一个,您可以通过在Environment选项卡下启动作业之后查看sparkUI来validation。

所以正确的方法是把这些选项放在同一行,像这样: --conf 'spark.executor.extraJavaOptions=-Da=b -Dc=d'如果你这样做,你可以find所有的设置将显示在sparkUI下。

我通过从另一个Scala应用程序中启动的spark-submit命令启动我的Spark应用程序。 所以我有一个数组像

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

confValues是:

  • yarn-cluster模式:
    "spark.driver.extraJavaOptions=-Drun.mode=production -Dapp.param=..."
  • 对于local[*]模式:
    "run.mode=development"

但是,要理解哪里(而不是)能够避免引号和空格,这有点棘手。 您可以检查Spark Web界面的系统属性值。