简单的Spark程序可以占用所有资源

时间:2016-04-12 16:03:58

标签: scala apache-spark

我有服务器在其中运行Spark master和slave。 Spark是使用下一个标志手动构建的:

build/mvn -Pyarn -Phadoop-2.6 -Dscala-2.11 -DskipTests clean package

我正在尝试远程执行下一个简单程序:

def main(args: Array[String]) {
        val conf = new SparkConf().setAppName("testApp").setMaster("spark://sparkserver:7077")
        val sc = new SparkContext(conf)
        println(sc.parallelize(Array(1,2,3)).reduce((a, b) => a + b))
}

Spark依赖:

"org.apache.spark" %% "spark-core" % "1.6.1"

登录程序执行:

16/04/12 18:45:46 WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

我的群集WebUI: enter image description here

为什么如此简单的应用程序使用所有可用资源?

P.S。此外,我注意到如果我为我的应用分配更多内存(例如10 gb),下次日志会出现多次:

16/04/12 19:23:40 INFO AppClient$ClientEndpoint: Executor updated: app-20160412182336-0008/208 is now RUNNING
16/04/12 19:23:40 INFO AppClient$ClientEndpoint: Executor updated: app-20160412182336-0008/208 is now EXITED (Command exited with code 1)

我认为主从关系的原因。我如何设置主设备和从设备(在同一台机器上):

sbin/start-master.sh
sbin/start-slave.sh spark://sparkserver:7077

P.P.S。当我用spark-shell连接到spark master时,一切都很好:

spark-shell --master spark://sparkserver:7077

3 个答案:

答案 0 :(得分:0)

默认情况下,纱线将分配所有"可用"如果纱线动态资源分配设置为true且您的作业仍有排队任务,则重新获取资源。您还可以查找您的纱线配置,即执行器的数量和分配给每个配置的内存,并根据您的需要调整功能。

答案 1 :(得分:0)

文件中的

:spark-default.xml -------> setting:spark.cores.max = 4

答案 2 :(得分:0)

这是一个驱动程序问题。驱动程序(我的scala应用程序)在我的本地计算机上运行。工人无法获得它。因此,尝试重新连接到驱动程序会占用所有资源。