Spark Standalone:应用程序获得0个内核

时间:2018-07-13 05:53:40

标签: apache-spark

我似乎无法为应用程序分配核心。这会导致以下(显然是常见的)错误消息:

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显示以下内容:

Spark UI screenshot

2 个答案:

答案 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。