如何在独立主服务器中并行运行多个spark应用程序

时间:2017-04-20 10:28:33

标签: apache-spark config high-availability apache-spark-standalone

使用Spark(1.6.1)独立主服务器,我需要在同一个spark主服务器上运行多个应用程序。 所有申请在第一个申请后提交,继续保留'等待'国家总是。我还观察到,一个运行中包含所有核心工人的总和。 我已经尝试使用SPARK_EXECUTOR_CORES来限制它,但是它用于纱线配置,而我正在运行的是#34;独立主机"。我尝试在同一个主人上运行许多工作人员,但每次首次提交的申请都会消耗所有工人。

4 个答案:

答案 0 :(得分:9)

我在spark独立群集上遇到了同样的问题。

我得到的是,不知何故,它正在利用一项工作的所有资源。我们需要定义资源,以便它们也可以用来运行其他工作。

以下是我用来提交火花作业的命令。

bin/spark-submit --class classname --master spark://hjvm1:6066 --deploy-mode cluster  --driver-memory 500M --conf spark.executor.memory=1g --conf spark.cores.max=1 /data/test.jar

答案 1 :(得分:2)

在Spark独立群集上并行运行多个作业的关键参数是spark.cores.max。请注意spark.executor.instances, 只有num-executorsspark.executor.cores才能让您在Spark独立版上实现这一目标,除了一个有效的工作之外,您的所有工作都将处于WAITING状态。

Spark-standalone resource scheduling

  

独立群集模式目前仅支持简单的FIFO   跨应用程序的调度程序但是,要允许多个并发   用户,可以控制每个资源的最大数量   应用程序将使用。默认情况下,它将获取所有核心   集群,只有在你运行一个应用程序时才有意义   时间。您可以通过设置spark.cores.max ...

来限制核心数量

答案 2 :(得分:1)

我假设您在一台服务器上运行所有工作程序并尝试模拟群集。这种假设的原因是,否则您可以使用一个worker和master来运行Standalone Spark集群 与普通内核相比,执行器内核完全不同。要设置执行程序的数量,您需要打开YARN,如前所述。执行程序核心是执行程序可以运行的并发任务数(当使用hdfs时,建议将其保持在5以下)[1]。

要使工作者运行所要限制的核心数是“CPU核心”。这些在Spark 1.6.1 [2]的配置中指定。在Spark中,可以选择在启动从属[3]时设置CPU核心数量。这种情况发生在-c CORES, - 核心CORES。其中定义了允许Spark应用程序在计算机上使用的总CPU核心数(默认值:全部可用);只在工人身上。

启动Spark的命令是这样的:

./ sbin / start-all.sh --cores 2

希望这有帮助

答案 3 :(得分:0)

在配置设置中,将此行添加到“./conf/spark-env.sh”此文件中。

导出SPARK_MASTER_OPTS =“ - Dspark.deploy.defaultCores = 1”

现在主机的最大核心数将限制为1。 如果多个spark应用程序正在运行,那么它将仅使用一个核心用于主服务器。然后定义工人数量并给予工人设定:

导出SPARK_WORKER_OPTS =“ - Dspark.deploy.defaultCores = 1”

每个工人也有一个核心。 请记住,必须为配置设置中的每个工作人员设置此项。