在具有多个工作节点的Spark 1.0.0独立模式下,我尝试从两台不同的计算机(同一Linux用户)运行Spark shell。
在文档中,它表示"默认情况下,提交到独立模式群集的应用程序将以FIFO(先进先出)顺序运行,每个应用程序将尝试使用所有可用节点。 #34;
每个工作人员的核心数设置为4,其中8个可用(通过SPARK_JAVA_OPTS =" -Dspark.cores.max = 4")。内存也是有限的,因此两者都应该有足够的内存。
但是,在查看Spark Master WebUI时,稍后启动的shell应用程序将始终保持状态" WAITING"直到第一个退出。分配给它的核心数是0,每个节点10G的内存(与已经运行的核心相同)
有没有办法让两个shell同时运行而不使用Mesos?
答案 0 :(得分:2)
在shell开始在spark独立群集上进行处理之前,必须有足够的内核和内存。您必须从每个spark shell指定所需的核心数,或者它们将全部使用它们。如果指定5个内核,执行程序内存= 10G(为执行程序分配的内存量),第二个使用2个内核和10G内存运行的spark shell,第二个仍然无法启动,因为第一个shell正在使用两个执行程序,并且正在使用两者上的所有内存。如果为每个spark shell指定5G执行程序内存,则它们可以同时运行。
基本上,您希望在独立群集上运行多个作业 - 遗憾的是,它实际上并非设计用于处理这种情况。如果你想这样做,你应该使用mesos或纱线。
答案 1 :(得分:1)
解决此问题的一种方法是使用total-executor-cores
限制每个火花外壳的核心数。例如,要将其限制为16个核心,请按以下方式启动:
bin/spark-shell --total-executor-cores 16 --master spark://$MASTER:7077
在这种情况下,每个shell将只使用16个核心,因此您可以在32个核心群集上运行两个shell。然后它们可以同时运行但从不使用超过16个核心:(
我知道,这个解决方案远非理想。您依靠用户限制自己,关闭shell,并在用户未运行代码时浪费资源。我创建了a request to fix this on JIRA,您可以投票。
答案 2 :(得分:0)
应用程序在shell死亡时结束。因此,您无法在两台笔记本电脑上同时运行两个spark-shell
。您可以做的是启动一个spark-shell
,启动另一个,并在第一个死亡时启动第二个。
与spark-shell
相反,spark-submit
会在计算结束后终止。因此,您可以spark-submit
一个应用,启动spark-shell
,并让shell在应用完成时接管。
或者您可以按顺序运行两个应用程序(一个接一个),并启动两个spark-submit
。