如何从IntelliJ IDEA向远程Spark集群提交代码

时间:2015-11-09 10:34:27

标签: intellij-idea apache-spark

我有两个集群,一个在本地虚拟机中,另一个在远程云中。这两个群集都处于独立模式。

我的环境:

Scala: 2.10.4
Spark: 1.5.1
JDK:   1.8.40
OS:    CentOS Linux release 7.1.1503 (Core)

本地群集:

  

Spark Master:spark:// local1:7077

远程群集:

  

Spark Master:spark:// remote1:7077

我想完成这个:

在IntelliJ IDEA本地(在我的laptp上)编写代码(只是简单的字数),并将Spark Master URL设置为spark://local1:7077spark://remote1:7077,然后在IntelliJ IDEA中运行我的代码。也就是说,我不想使用spark-submit来提交工作。

但我遇到了一些问题:

当我使用本地群集时,一切顺利。在IntelliJ IDEA中运行代码或使用spark-submit可以将作业提交到集群并完成工作。

但是当我使用远程集群时,我收到了警告日志:

  

TaskSchedulerImpl:初始作业未接受任何资源;检查您的集群UI以确保工作人员已注册并具有足够的资源

充足的资源而非足够的内存

此日志继续打印,无需进一步操作。 IntelliJ IDEA中的spark-submit和运行代码都是相同的。

我想知道:

  • 是否可以将代码从IntelliJ IDEA提交到远程群集?
  • 如果没问题,是否需要配置?
  • 可能导致我出现问题的原因是什么?
  • 我该如何处理这个问题?

非常感谢!

更新

有一个类似的问题here,但我认为我的场景不同。当我在IntelliJ IDEA中运行我的代码,并将Spark Master设置为本地虚拟机群集时,它可以工作。但是我收到了Initial job has not accepted any resources;...警告。

我想知道安全政策或烟花是否会导致此问题?

1 个答案:

答案 0 :(得分:4)

以编程方式提交代码(例如通过SparkSubmit)非常棘手。至少有各种环境设置和注意事项 - 由spark-submit脚本处理 - 在scala程序中很难复制。我仍然不确定如何实现它:并且在该主题的spark开发者社区中已经存在许多长时间运行的线程。

我的回答是关于你帖子的一部分:特别是

  

TaskSchedulerImpl:初始作业未接受任何资源;校验   您的群集UI以确保工作人员已注册并拥有   足够的资源

原因通常是请求的内存和/或作业中的内核数量与群集上可用的内核数量不匹配。可能在从IJ提交时

  

$ SPARK_HOME / CONF /火花defaults.conf

未正确匹配现有群集上的任务所需的参数。您可能需要更新:

spark.driver.memory   4g
spark.executor.memory   8g
spark.executor.cores  8

您可以检查端口8080上的spark ui,以验证您请求的参数在群集上是否实际可用。