从本地IDE运行Spark

时间:2019-02-07 00:35:37

标签: maven apache-spark

我花了一些时间来尝试在本地运行复杂的spark应用程序,以便更快地进行测试(而不必打包并部署到集群)。

某些上下文:

  • 此spark应用程序与Cassandra的Datastax Enterprise版本及其分布式文件系统连接,因此需要提供一些显式的jar(在Maven中不可用)
  • 这些jar可以在我的本地计算机上使用,并且为了“奶酪”,我尝试将它们放在SPARK_HOME / jars中,以便将它们自动添加到类路径中。
  • 我尝试通过将所需的配置设置放在SPARK_HOME / conf下的spark-defaults.conf中来对它们进行类似的操作
  • 在构建此应用程序时,我们不会构建uber jar,而是使用--jars在服务器上进行火花提交

我面临的问题是,当我通过IDE运行Spark Application时,似乎没有从SPARK_HOME控制器(配置或jar)中拾取任何其他项。我花了几个小时试图使配置项正常工作,并最终在启动Spark会话之前在我的测试用例中将它们设置为System.property值,以使Spark能够接收它们,因此可以忽略配置设置。 / p>

但是,我不知道如何为供应商特定的jar文件重现此内容。有没有一种简单的方法可以模拟spark-submit的--jars行为,并使用此jar值在首页进行我的spark会话设置?注意:我在代码中使用以下命令来启动Spark会话:

SparkSession.builder().config(conf).getOrCreate()

其他信息(如果有帮助的话):

  • 我在SPARK_HOME中本地拥有的Spark版本与我的代码使用Maven进行编译的版本相同。
  • 我问了另一个与此配置相关的问题:Loading Spark Config for testing Spark Applications
  • 当我在应用程序中打印SPARK_HOME环境变量时,我得到的是正确的SPARK_HOME值,因此我不确定为什么从这里都没有选择配置文件或jar文件。从我的IDE运行应用程序时,是否有可能没有选择SPARK_HOME环境变量并使用所有默认值?

1 个答案:

答案 0 :(得分:0)

在构建SparkSession时,您可以通过传递“ spark.jars”作为键以及以逗号分隔的jar路径列表来使用.config(key, value),如下所示:

SparkSession.builder().config("spark.jars", "/path/jar1.jar, /path/jar2.jar").config(conf).getOrCreate()