我想在dev / prod环境中更改Spark作业的Typesafe config。在我看来,实现这一目标的最简单方法是将-Dconfig.resource=ENVNAME
传递给工作。然后Typesafe配置库将为我完成这项工作。
有没有办法直接将该选项传递给作业?或者也许有更好的方法在运行时更改作业配置?
修改
--conf "spark.executor.extraJavaOptions=-Dconfig.resource=dev"
选项时,没有任何反应。Error: Unrecognized option '-Dconfig.resource=dev'.
传递给 spark-submit 命令时,我得到-Dconfig.resource=dev
。答案 0 :(得分:48)
更改spark-submit
命令行,添加三个选项:
--files <location_to_your_app.conf>
--conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'
--conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'
答案 1 :(得分:17)
这是我的附加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'
希望它有所帮助。
答案 2 :(得分:9)
我将-D参数传递给spark执行器和驱动程序时遇到了很多问题,我在博客文章中添加了一个引用:
&#34;
传递参数的正确方法是通过属性:
“spark.driver.extraJavaOptions
”和“spark.executor.extraJavaOptions
”:
我已经传递了log4J配置属性和配置所需的参数。 (对于驱动程序,我只能传递log4j配置)。
例如(写在使用“-properties-file”的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的整体配置的my blog post。 我也在Yarn上跑。
答案 3 :(得分:6)
--files <location_to_your_app.conf>
--conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'
--conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'
如果以这种方式书写,后面的--conf
将覆盖前一个Environment
,您可以通过在
--conf 'spark.executor.extraJavaOptions=-Da=b -Dc=d'
标签下开始作业后查看sparkUI来验证这一点。
所以正确的方法是将选项放在同一行下,如下所示:
sudo waagent –deprovision
如果你这样做,你会发现你的所有设置都将显示在sparkUI下。
答案 4 :(得分:2)
我通过从另一个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界面中查看系统属性值。
答案 5 :(得分:1)
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 [*]”)
答案 6 :(得分:0)
使用下面命令中的方法,可能对您有所帮助 -
spark-submit --master local [2] - conf 'spark.driver.extraJavaOptions = Dlog4j.configuration =文件:/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
答案 7 :(得分:0)
我最初有这个配置文件:
my-app {
environment: dev
other: xxx
}
这就是我在我的spark scala代码中加载配置的方式:
val config = ConfigFactory.parseFile(File<"my-app.conf">)
.withFallback(ConfigFactory.load())
.resolve
.getConfig("my-app")
使用此设置,尽管Typesafe配置文档和所有其他答案都说明了,当我启动我的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