如何从IntelliJ IDEA将代码提交到远程的Spark集群

7

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

我的环境:

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

但我遇到了一些问题:

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

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

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

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

而且这个日志一直打印,没有进一步的操作。无论是使用spark-submit还是在IntelliJ IDEA中运行代码,结果都是一样的。

我想知道:

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

非常感谢!

更新

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

我想知道安全策略或防火墙是否会导致此问题?


@AlbertoBonsanto 但是你的另一篇帖子并没有展示如何直接从IJ运行:它需要构建jar并使用spark-submit - WestCoastProjects
1个回答

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接