加载Spark Config以测试Spark应用程序

时间:2019-02-03 20:01:52

标签: apache-spark testing integration-testing

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

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

当前状态:

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

2 个答案:

答案 0 :(得分:0)

您是否在IDE中添加了带有--properties-file值的spark-defaults.conf标志作为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?

答案 1 :(得分:0)

不确定这是否对任何人都有帮助,但是我最终从测试资源目录中读取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选项。这样,我可以在测试设置中保留此逻辑,而无需修改现有的应用程序代码。