首页 文章

如何在独立群集模式下为每个工作人员分配更多执行程序?

提问于
浏览
11

我在一个由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 回答

  • 27

    首先需要配置spark独立群集,然后设置要运行的每个spark应用程序所需的资源量 .

    要配置群集,您可以尝试以下操作:

    • conf/spark-env.sh

    • 设置 SPARK_WORKER_INSTANCES = 10 ,确定每个节点的工作器实例数(#Executors)(默认值仅为1)

    • 设置一个Worker可以使用的 SPARK_WORKER_CORES = 15 #个核心数(默认值:所有核心,大小写为36)

    • 设置 SPARK_WORKER_MEMORY = 55g #可在一台计算机(工作节点)上用于运行Spark程序的内存总量 .

    • 将此配置文件复制到同一文件夹上的所有工作节点

    • 通过运行 sbinsbin/start-all.sh ,...)中的脚本来启动集群

    由于您有5名工作人员,使用上述配置,您应该在主Web界面上看到5( Worker )* 10(每个 Worker 的执行者)= 50个活动执行者(默认情况下为http://localhost:8080

    在独立模式下运行应用程序时,默认情况下,它将获取群集中的所有可用执行程序 . 您需要显式设置运行此应用程序的资源量:例如:

    val conf = new SparkConf()
                 .setMaster(...)
                 .setAppName(...)
                 .set("spark.executor.memory", "2g")
                 .set("spark.cores.max", "10")
    
  • 0

    从Spark 1.4开始,应该可以配置:

    Settingspark.executor.cores

    Default :在YARN模式下为1,工作站上的所有可用核心处于独立模式 .

    Description :每个执行程序使用的核心数 . 仅适用于YARN和独立模式 . 在独立模式下,设置此参数允许应用程序在同一工作程序上运行多个执行程序,前提是该工作程序上有足够的核心 . 否则,每个应用程序只会运行一个执行程序 .

    http://spark.apache.org/docs/1.4.0/configuration.html#execution-behavior

  • 0

    直到现在, Apache Spark 2.2 Standalone Cluster Mode Deployment 都没有解决 number of EXECUTORS per WORKER 的问题,....但是有一个替代方案,即:启动 Spark Executors Manually:

    [usr@lcl ~spark/bin]# ./spark-class org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-url spark://CoarseGrainedScheduler@DRIVER-URL:PORT --executor-id val --hostname localhost-val --cores 41 --app-id app-20170914105902-0000-just-exemple --worker-url spark://Worker@localhost-exemple:34117
    

    希望对你有所帮助!

  • 1

    在独立模式下,默认情况下,在启动应用程序时会获取群集上的所有资源 . 您需要使用 --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个核心 . 希望这可以帮助!

相关问题