【问题标题】:Loading Spark Config for testing Spark Applications加载 Spark Config 以测试 Spark 应用程序
【发布时间】:2019-02-03 20:01:51
【问题描述】:

我一直在尝试在本地笔记本电脑上测试 spark 应用程序,然后再将其部署到集群(以避免每次都打包和部署我的整个应用程序),但在加载 spark 配置文件时遇到了困难。

当我在集群上运行我的应用程序时,我通常会向应用程序提供一个 spark 配置文件(使用 spark-submit 的 --conf)。这个文件有很多配置选项,因为这个应用程序与 Cassandra 和 HDFS 交互。但是,当我尝试在本地笔记本电脑上执行相同操作时,我不确定如何加载此配置文件。我知道我可能可以编写一段代码来获取配置文件的文件路径,然后通过并解析所有值并将它们设置在配置中,但我只是想知道是否有更简单的方法。

当前状态:

  • 我将所需的配置文件放在我的 SPARK_HOME/conf 目录中,并将其命名为 spark-defaults.conf ---> 这没有得到应用,但是这个完全相同的文件使用 spark-submit 运行良好
  • 对于本地模式,当我创建 spark 会话时,我将 Spark Master 设置为“local[2]”。我在创建 spark 会话时这样做,所以我想知道是否可以使用指定的配置文件创建此会话。

【问题讨论】:

    标签: apache-spark testing integration-testing


    【解决方案1】:

    您是否在 IDE 中添加了带有 spark-defaults.conf 值的 --properties-file 标志作为 JVM 的参数?

    在官方文档 (https://spark.apache.org/docs/latest/configuration.html) 中不断提到“您的默认属性文件”。某些选项无法在您的应用程序中设置,因为 JVM 已经启动。而且由于 conf 目录是通过 spark-submit 只读的,所以我想你必须在本地运行时显式加载配置文件。

    这里已经讨论过这个问题: How to use spark-submit's --properties-file option to launch Spark application in IntelliJ IDEA?

    【讨论】:

    • 感谢您的回复!我不完全理解的是,当我在没有参数的情况下启动 spark shell 时,如何使用 spark-defaults.conf 获取所有所需的值。但是,当我使用 SparkSession.builder(即直接从 IDE 或代码)运行它时,不会使用 spark-defaults.conf 文件。有没有办法弄清楚从 IDE 运行时正在使用什么 SPARK_HOME?我想知道这是否与它有关。
    • 我认为这不是路径问题,因为您使用的是依赖项中的 jar。由于我们可以在开发过程中在不同的地方指定参数,Spark 的创建者不得不使用某种优先规则来解决潜在的冲突。在分布式(或伪分布式)集群上提交应用程序只是一种不同的情况,有不同的问题。
    【解决方案2】:

    不确定这是否对任何人有帮助,但我最终从测试资源目录中读取了 conf 文件,然后将所有值设置为系统属性(从 Spark 源代码复制):

    //_sparkConfs is just a map of (String,String) populated from reading the conf file
    for {
      (k, v) ← _sparkConfs
    } {
      System.setProperty(k, v)
    }
    

    这实质上是在一定程度上模拟了 spark-submit 的 --properties-file 选项。通过这样做,我能够将这个逻辑保留在我的测试设置中,而无需修改现有的应用程序代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 2015-05-17
      • 2017-03-23
      • 1970-01-01
      • 2017-10-22
      相关资源
      最近更新 更多