我有服务器在其中运行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
为什么如此简单的应用程序使用所有可用资源?
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
答案 0 :(得分:0)
默认情况下,纱线将分配所有"可用"如果纱线动态资源分配设置为true且您的作业仍有排队任务,则重新获取资源。您还可以查找您的纱线配置,即执行器的数量和分配给每个配置的内存,并根据您的需要调整功能。
答案 1 :(得分:0)
:spark-default.xml -------> setting:spark.cores.max = 4
答案 2 :(得分:0)
这是一个驱动程序问题。驱动程序(我的scala应用程序)在我的本地计算机上运行。工人无法获得它。因此,尝试重新连接到驱动程序会占用所有资源。