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

xri*_*ing 7 intellij-idea apache-spark

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

我的环境:

Scala: 2.10.4
Spark: 1.5.1
JDK:   1.8.40
OS:    CentOS Linux release 7.1.1503 (Core)
Run Code Online (Sandbox Code Playgroud)

本地集群:

Spark Master:spark:// local1:7077

远程集群:

Spark Master:spark:// remote1:7077

我想完成这个:

写代码(只是简单的字计数)在IntelliJ IDEA的地方(在我laptp)和星火主URL设置为spark://local1:7077spark://remote1:7077,然后运行我的IntelliJ IDEA的代码.也就是说,我不想spark-submit用来提交工作.

但我遇到了一些问题:

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

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

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

这是充足的资源没有足够的内存!

此日志保持打印,无需进一步操作.spark-submitIntelliJ IDEA中的两个和运行代码都是相同的.

我想知道:

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

非常感谢!

更新

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

我想知道安全策略或烟花是否会导致这种情况?

jav*_*dba 4

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

我在这里的回答是关于您帖子的一部分:特别是

TaskSchedulerImpl:初始作业尚未接受任何资源;检查集群 UI 以确保工作线程已注册并拥有足够的资源

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

$SPARK_HOME/conf/spark-defaults.conf

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

spark.driver.memory   4g
spark.executor.memory   8g
spark.executor.cores  8
Run Code Online (Sandbox Code Playgroud)

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