在 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' 中指定的值。