我在一个由5个工作节点组成的集群中使用Spark 1.3.0,每个节点有36个内核和58GB内存 . 我想配置Spark的Standalone集群,每个worker有很多执行程序 .
我已经看到合并的SPARK-1706,但是如何实际配置多个 Actuator 并不是很明确 .
以下是群集的最新配置:
spark.executor.cores = "15"
spark.executor.instances = "10"
spark.executor.memory = "10g"
将Spark应用程序提交到群集时,这些设置在 SparkContext
上设置 .
4 回答
首先需要配置spark独立群集,然后设置要运行的每个spark应用程序所需的资源量 .
要配置群集,您可以尝试以下操作:
在
conf/spark-env.sh
:设置
SPARK_WORKER_INSTANCES = 10
,确定每个节点的工作器实例数(#Executors)(默认值仅为1)设置一个Worker可以使用的
SPARK_WORKER_CORES = 15
#个核心数(默认值:所有核心,大小写为36)设置
SPARK_WORKER_MEMORY = 55g
#可在一台计算机(工作节点)上用于运行Spark程序的内存总量 .将此配置文件复制到同一文件夹上的所有工作节点
通过运行
sbin
(sbin/start-all.sh
,...)中的脚本来启动集群由于您有5名工作人员,使用上述配置,您应该在主Web界面上看到5( Worker )* 10(每个 Worker 的执行者)= 50个活动执行者(默认情况下为http://localhost:8080)
在独立模式下运行应用程序时,默认情况下,它将获取群集中的所有可用执行程序 . 您需要显式设置运行此应用程序的资源量:例如:
从Spark 1.4开始,应该可以配置:
Setting :
spark.executor.cores
Default :在YARN模式下为1,工作站上的所有可用核心处于独立模式 .
Description :每个执行程序使用的核心数 . 仅适用于YARN和独立模式 . 在独立模式下,设置此参数允许应用程序在同一工作程序上运行多个执行程序,前提是该工作程序上有足够的核心 . 否则,每个应用程序只会运行一个执行程序 .
http://spark.apache.org/docs/1.4.0/configuration.html#execution-behavior
直到现在, Apache Spark 2.2 Standalone Cluster Mode Deployment 都没有解决 number of EXECUTORS per WORKER 的问题,....但是有一个替代方案,即:启动 Spark Executors Manually:
希望对你有所帮助!
在独立模式下,默认情况下,在启动应用程序时会获取群集上的所有资源 . 您需要使用
--executor-cores
和--total-executor-cores
配置指定所需的执行程序数 .例如,如果群集中有1个worker(1个worker == 1台机器,每台机器只有1个工作器,这是一个很好的做法),它的池中有3个核心和3G可用(这在spark中指定) -env.sh),当您使用
--executor-cores 1 --total-executor-cores 2 --executor-memory 1g
提交应用程序时,将为该应用程序启动两个执行程序,每个程序包含1个核心和1个核心 . 希望这可以帮助!