我似乎无法为应用程序分配核心。这会导致以下(显然是常见的)错误消息:
Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
我在Spark集群中有一个主机和两个从机。所有都是带有16GB RAM的8核i7。
我仅在指定主机的IP地址的情况下,在全部三个主机上都保留了spark-env.sh
虚拟用户。
我的spark-submit
是:
nohup ./bin/spark-submit
--jars ./ikoda/extrajars/ikoda_assembled_ml_nlp.jar,./ikoda/extrajars/stanford-corenlp-3.8.0.jar,./ikoda/extrajars/stanford-parser-3.8.0.jar \
--packages datastax:spark-cassandra-connector:2.0.1-s_2.11 \
--class ikoda.mlserver.Application \
--conf spark.cassandra.connection.host=192.168.0.33 \
--conf spark.cores.max=4 \
--driver-memory 4g –num-executors 2 --executor-memory 2g --executor-cores 2 \
--master spark://192.168.0.141:7077 ./ikoda/ikodaanalysis-mlserver-0.1.0.jar 1000 > ./logs/nohup.out &
我怀疑我将代码中的sparkConf初始化与spark-submit
混淆了。我需要这个,因为应用程序涉及SparkStreaming
,这可能需要重新初始化SparkContext
。
sparkConf设置如下:
val conf = new SparkConf().setMaster(s"spark://$sparkmaster:7077").setAppName("MLPCURLModelGenerationDataStream")
conf.set("spark.streaming.stopGracefullyOnShutdown", "true")
conf.set("spark.cassandra.connection.host", sparkcassandraconnectionhost)
conf.set("spark.driver.maxResultSize", sparkdrivermaxResultSize)
conf.set("spark.network.timeout", sparknetworktimeout)
conf.set("spark.jars.packages", "datastax:spark-cassandra-connector:"+datastaxpackageversion)
conf.set("spark.cores.max", sparkcoresmax)
Spark UI显示以下内容:
答案 0 :(得分:0)
好的,这肯定是程序员错误的情况。
但也许其他人也会犯类似的错误。 Master之前曾被用作本地Spark。我已经在spark-defaults.conf中添加了一些执行程序设置,然后几个月后就忘记了这一点。
有一个级联的层次结构,SparkConf设置优先,然后是spark-submit设置,然后是spark-defaults.conf。 spark-defaults.conf会覆盖Apache Spark团队设置的默认值
一旦我从spark-defaults中删除了设置,所有的问题就都解决了。
答案 1 :(得分:0)
这是因为您的最大物理内存。
您的Spark UI 14.6GB中的Spark内存,因此您必须为卷以下的每个执行器请求内存 14.6GB,为此,您可以将配置添加到您的Spark conf中,如下所示:
conf.set("spark.executor.memory", "10gb")
如果您请求的物理内存超过了,spark不会为您的工作分配cpu核心,并在spark UI的 Cores 中显示0,然后运行NOTHING。