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

Posted

技术标签:

【中文标题】如何从 IntelliJ IDEA 向远程 Spark 集群提交代码【英文标题】:How to submit code to a remote Spark cluster from IntelliJ IDEA 【发布时间】:2015-11-09 10:34:27 【问题描述】:

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

我的环境:

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

本地集群:

火花大师:spark://local1:7077

远程集群:

火花大师:spark://remote1:7077

我想完成这个:

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

但我遇到了一些问题:

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

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

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

这是足够的资源而不是足够的内存

并且此日志继续打印,没有进一步的操作。 spark-submit 和 IntelliJ IDEA 中的运行代码结果相同。

我想知道:

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

非常感谢!

更新

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

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

【问题讨论】:

Running spark code on eclipse with spark being install on another server的可能重复 @AlbertoBonsanto 但是其他帖子(这是你的)确实显示如何直接从 IJ 运行:它需要构建 jar 并使用 spark-submit 【参考方案1】:

以编程方式提交代码(例如通过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

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

【讨论】:

以上是关于如何从 IntelliJ IDEA 向远程 Spark 集群提交代码的主要内容,如果未能解决你的问题,请参考以下文章

如何在Windows中使用Intellij idea搭建远程Hadoop开发环境

IntelliJ IDEA 2022.2 Beta 2 发布

如何使用 Rhino 实现用于远程 javascript 调试的 intelliJ IDEA 插件?

在IntelliJ IDEA中远程断点调试tomcat

如何在Mac使用Intellij idea搭建远程Hadoop开发环境

如何在Mac使用Intellij idea搭建远程Hadoop开发环境