首次运行后无法更改spark执行器的核心数

时间:2017-08-08 08:19:08

标签: apache-spark

我使用spark 2.1.0并且我注意到我的spark流应用程序中存在奇怪的行为。在首次运行时设置后,我无法更改执行程序的核心数。应用程序在spark独立群集上运行。

我第一次以这种方式运行我的火花流媒体应用

spark-submit --driver-java-options -Denv=test --master spark://my_server:6066 --deploy-mode cluster --driver-memory 3G  --driver-cores 4  --executor-memory 3G --executor-cores 4 --conf spark.metrics.conf=/usr/lib/spark/conf/metrics_analytics.properties --class com.MyApp hdfs:///apps/app.jar

比我停止了我的应用

spark-submit --master spark://my_server:6066 --kill driver-20170807163818-0051 

我运行我的火花(每个执行者3个核心)

spark-submit --driver-java-options -Denv=test --master spark://my_server:6066 --deploy-mode cluster --driver-memory 3G  --driver-cores 4  --executor-memory 3G --executor-cores 3 --conf spark.metrics.conf=/usr/lib/spark/conf/metrics_analytics.properties --class com.MyApp hdfs:///apps/app.jar

{[my_server] out:   "action" : "CreateSubmissionResponse",
[my_server] out:   "message" : "Driver successfully submitted as driver-20170808093847-0052",
[my_servero] out:   "serverSparkVersion" : "2.1.0",
[my_server] out:   "submissionId" : "driver-20170808093847-0052",
[my_server] out:   "success" : true
[my_server] out: }

这是我的火花配置

  .setMaster(configuration.spark.master) //it is better to set master as a spark submit param
  .set("spark.cassandra.connection.host", configuration.cassandra.server)
  .set("spark.cassandra.auth.username", configuration.cassandra.user)
  .set("spark.cassandra.auth.password", configuration.cassandra.password)
  .set("spark.cassandra.connection.keep_alive_ms", configuration.cassandra.timeout.toString)
  .set("spark.streaming.backpressure.enabled", "true")
  .set("spark.streaming.kafka.maxRatePerPartition", configuration.spark.maxRatePerPartition.toString)
  .set("spark.streaming.stopGracefullyOnShutdown", "true")
  .set("spark.metrics.namespace", "my-app")
  .set("spark.cassandra.output.consistency.level", "LOCAL_QUORUM")

即使我更改了执行程序的核心数,我的应用程序仍然使用4个核心而不是3个核心。 我也删除了检查点数据,但它没有帮助。

我想知道它是否只是UI问题,或者我因为某些原因(按应用名称为作业存储了一些元数据而无法更改我的应用程序的配置?)。

这是我的 Spark UI

1 个答案:

答案 0 :(得分:1)

最后,我已经解决了导致问题的两个问题。

  1. - num-executors似乎不适用于独立群集。我不得不使用--total-executor-cores。
  2. 在更改核心数量后,我必须清理检查点目录,以便让Spark看到更改。
  3. 这种检查点对于部署应用程序,更改配置,广播等非常痛苦。好的结构化流式传输解决了一些问题,但仍然不是每个人都会使用这个新的API。