在 EMR 上使用 fat jar 进行 spark 时覆盖配置设置
override config settings when using a fat jar for spark on EMR
我正在编写一个 spark 应用程序,并使用 sbt assembly 创建一个 fat jar,我可以将其发送到 spark-submit(通过 Amazon EMR)。
我的应用程序使用类型安全配置,在我的 resources
目录中有一个 reference.conf
文件。
我的 jar 在 Amazon S3 上,我使用命令 aws emr add-steps..
创建一个新的 spark 作业(它将 jar 下载到集群并将其发送到 spark-submit)。
我知道一般情况下,我可以使用 application.conf
来覆盖设置。但是,由于我使用的是 spark(和一个 fat jar),我需要一些方法来部署我的覆盖。
使用 spark 时推荐的覆盖应用程序配置设置的方法是什么?
在我的 spark java 代码中,我这样写来覆盖应用程序配置
SparkConf sparkConf = new SparkConf();
sparkConf.setMaster(sparkMaster);
sparkConf.set("spark.executor.memory", "1024M");
sparkConf.set("spark.default.parallelism", "48");
sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
你可以使用 spark-submit... --conf my.app.config.value=50 --conf config.file=other.conf ... fat.jar
当使用 typesafe.config.ConfigFactory.load() 时,在命令行中指定的值将覆盖 'other.conf' 中指定的值,后者又会覆盖 fatjar 中 'reference.conf' 中指定的值。
我正在编写一个 spark 应用程序,并使用 sbt assembly 创建一个 fat jar,我可以将其发送到 spark-submit(通过 Amazon EMR)。
我的应用程序使用类型安全配置,在我的 resources
目录中有一个 reference.conf
文件。
我的 jar 在 Amazon S3 上,我使用命令 aws emr add-steps..
创建一个新的 spark 作业(它将 jar 下载到集群并将其发送到 spark-submit)。
我知道一般情况下,我可以使用 application.conf
来覆盖设置。但是,由于我使用的是 spark(和一个 fat jar),我需要一些方法来部署我的覆盖。
使用 spark 时推荐的覆盖应用程序配置设置的方法是什么?
在我的 spark java 代码中,我这样写来覆盖应用程序配置
SparkConf sparkConf = new SparkConf();
sparkConf.setMaster(sparkMaster);
sparkConf.set("spark.executor.memory", "1024M");
sparkConf.set("spark.default.parallelism", "48");
sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
你可以使用 spark-submit... --conf my.app.config.value=50 --conf config.file=other.conf ... fat.jar
当使用 typesafe.config.ConfigFactory.load() 时,在命令行中指定的值将覆盖 'other.conf' 中指定的值,后者又会覆盖 fatjar 中 'reference.conf' 中指定的值。