如何将-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界面的系统属性值。