我在 HPC 环境中使用Spark 独立模式 spark version 1.6.1在 slurm 上运行 spark 。问题是我的 slurm 节点在 spark 独立模式下没有完全使用。我在我的 slurm 脚本中使用 spark-submit。一个节点上有 16 个内核可用,正如我在 SPARK UI 上看到的那样,每个执行程序都有 16 个内核。但实际上每个执行器只使用了一个核心。执行器进程正在运行的工作节点上的 top + 1 命令显示 16 个 cpu 中只有一个 cpu 正在使用。我有 255 个分区,所以分区在这里似乎不是问题。
$SPARK_HOME/bin/spark-submit \
--class se.uu.farmbio.vs.examples.DockerWithML \
--master spark://$MASTER:7077 \
--executor-memory 120G \
--driver-memory 10G \
当我将脚本更改为
$SPARK_HOME/bin/spark-submit \
--class se.uu.farmbio.vs.examples.DockerWithML \
--master local[*] \
--executor-memory 120G \
--driver-memory 10G \
我在 Spark UI 上看到 0 个内核分配给执行程序,这是可以理解的,因为我们不再使用 spark 独立集群模式。但是现在,当我在工作节点上检查 top + 1 命令时,所有内核都被使用,这暗示问题不在于应用程序代码,而在于 spark 独立模式对资源的利用。
那么当 spark 有 16 个内核并且有足够的分区时,它是如何决定每个执行程序使用一个内核的呢?我可以更改什么以便它可以利用所有内核?
我正在使用spark-on-slurm来启动工作。
两种情况下的 Spark 配置都是休闲的:
--master spark://MASTER:7077
(spark.app.name,DockerWithML)
(spark.jars,file:/proj/b2015245/bin/spark-vs/vs.examples/target/vs.examples-0.0.1-jar-with-dependencies.jar)
(spark.app.id,app-20170427153813-0000)
(spark.executor.memory,120G)
(spark.executor.id,driver)
(spark.driver.memory,10G)
(spark.history.fs.logDirectory,/proj/b2015245/nobackup/eventLogging/)
(spark.externalBlockStore.folderName,spark-75831ca4-1a8b-4364-839e-b035dcf1428d)
(spark.driver.maxResultSize,2g)
(spark.executorEnv.OE_LICENSE,/scratch/10230979/SureChEMBL/oe_license.txt)
(spark.driver.port,34379)
(spark.submit.deployMode,client)
(spark.driver.host,x.x.x.124)
(spark.master,spark://m124.uppmax.uu.se:7077)
--主本地[*]
(spark.app.name,DockerWithML)
(spark.app.id,local-1493296508581)
(spark.externalBlockStore.folderName,spark-4098cf14-abad-4453-89cd-3ce3603872f8)
(spark.jars,file:/proj/b2015245/bin/spark-vs/vs.examples/target/vs.examples-0.0.1-jar-with-dependencies.jar)
(spark.driver.maxResultSize,2g)
(spark.master,local[*])
(spark.executor.id,driver)
(spark.submit.deployMode,client)
(spark.driver.memory,10G)
(spark.driver.host,x.x.x.124)
(spark.history.fs.logDirectory,/proj/b2015245/nobackup/eventLogging/)
(spark.executorEnv.OE_LICENSE,/scratch/10230648/SureChEMBL/oe_license.txt)
(spark.driver.port,36008)
谢谢,