【问题标题】:override config settings when using a fat jar for spark on EMR在 EMR 上使用 fat jar 进行 spark 时覆盖配置设置
【发布时间】:2015-05-14 12:57:57
【问题描述】:

我正在编写一个 spark 应用程序,并使用 sbt 程序集创建一个 fat jar,我可以将其发送到 spark-submit(通过 Amazon EMR)。 我的应用程序使用 typesafe-config,在我的 resources 目录中有一个 reference.conf 文件。 我的 jar 在 Amazon S3 上,我使用命令 aws emr add-steps.. 创建一个新的 spark 作业(它将 jar 下载到集群并将其发送到 spark-submit)。 我知道一般来说,我可以使用application.conf 来覆盖设置。但是,由于我使用的是 spark(和一个 fat jar),我需要一些方法来部署我的覆盖。

使用 spark 时覆盖应用程序配置设置的推荐方法是什么?

【问题讨论】:

    标签: apache-spark amazon-emr typesafe-config


    【解决方案1】:

    你可以使用 spark-submit... --conf my.app.config.value=50 --conf config.file=other.conf ... fat.jar

    当使用 typesafe.config.ConfigFactory.load() 时,命令行上指定的值将覆盖“other.conf”中指定的值,进而覆盖 fatjar 中“reference.conf”中指定的值。

    【讨论】:

      【解决方案2】:

      在我的 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);
      

      【讨论】:

      • 嗨 Sandesh,我不需要覆盖 spark 的配置。我的应用程序还有一个配置文件(reference.conf),它与所有其余资源一起打包在一个胖 jar 中(当我使用 sbt 程序集时)。有时我想覆盖配置中的一项设置。如果我将此设置写入名为 application.conf 的新文件中,我可以这样做,因为它在类型安全配置中受支持。但是,由于应用程序是用aws emr add-steps.. 激活的,所以它看不到 application.conf。
      • 即如果我的reference.conf中有这个设置:"age" = 18,如何在不创建新的胖罐的情况下将其覆盖为21?
      猜你喜欢
      • 2017-03-19
      • 1970-01-01
      • 2011-01-26
      • 2011-09-24
      • 2017-03-27
      • 2018-05-24
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多