spark-submit 传递系统变量 或 自定义属性 的方法

现有Spark任务需要配置一些系统变量(注:并非环境变量)。
在程序中可以通过在代码中进行配置:

System.setProperty("prop", "value");

但是如果一些实际的生产环境,改动代码的话涉及到重新的测试和部署上线。这样就很麻烦了。
java普通程序可以通过 java -Dprop=value的参数来设置。
hadoop的MapReduce程序也可以通过用ToolRunner来动态加载系统变量和配置。
那么问题来了,spark任务能不能通过入参的方式修改一下系统变量呢?

查了下官网的api,发现有 –conf prop=value 的方式,但是这样只能传递指定 spark 配置属性的值。例如spark.default.parallelism=100,自定义的配置和一些系统变量配置上去日志提示会忽略这种配置。

继续翻阅,发现有–driver-java-options的配置。官网说可以给 driver 传递额外的 Java 选项。程序配置上去就ok 了,实现了类似于用-D的参数来配置程序。
具体脚本示例如下:

spark-submit \
--driver-java-options '-Djava.util.Arrays.useLegacyMergeSort=true' \
--class com.xxxxxx.recommend.similarity.SimilarityEtl \
--master yarn-cluster \
--num-executors 20 \
--driver-memory 6g \
--executor-memory 4g \
--executor-cores 2 \
--queue userqueue \
/data/task/etl/etl-similarity-1.1.4.jar

你可能感兴趣的:(spark)