我有两个集群,一个在本地虚拟机中,另一个在远程云中。这两个群集都处于独立模式。
我的环境:
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:7077
和spark://remote1:7077
,然后在IntelliJ IDEA中运行我的代码。也就是说,我不想使用spark-submit
来提交工作。
但我遇到了一些问题:
当我使用本地群集时,一切顺利。在IntelliJ IDEA中运行代码或使用spark-submit可以将作业提交到集群并完成工作。
但是当我使用远程集群时,我收到了警告日志:
TaskSchedulerImpl:初始作业未接受任何资源;检查您的集群UI以确保工作人员已注册并具有足够的资源
充足的资源而非足够的内存!
此日志继续打印,无需进一步操作。 IntelliJ IDEA中的spark-submit
和运行代码都是相同的。
我想知道:
非常感谢!
更新
有一个类似的问题here,但我认为我的场景不同。当我在IntelliJ IDEA中运行我的代码,并将Spark Master
设置为本地虚拟机群集时,它可以工作。但是我收到了Initial job has not accepted any resources;...
警告。
我想知道安全政策或烟花是否会导致此问题?
答案 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,以验证您请求的参数在群集上是否实际可用。