如何在standalone主节点上并行运行多个spark应用程序

11

我使用Spark(1.6.1)独立主节点,在同一台Spark主机上运行多个应用程序。在第一个应用程序之后提交的所有应用程序始终保持“等待”状态。我还注意到,正在运行的应用程序占用了所有工作节点的核心总和。 我已经尝试通过使用SPARK_EXECUTOR_CORES来限制它,但它适用于yarn配置,而我正在运行的是“独立主节点”。我尝试在同一主节点上运行多个工作节点,但每次第一个提交的应用程序都会占用所有工作节点。

4个回答

10

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

我发现,它会将所有资源用于一个单独的作业。我们需要定义资源,以便为运行其他作业留出空间。

下面是我用来提交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

3
在Spark独立集群上并行运行多个作业的关键参数是spark.cores.max。请注意,仅使用spark.executor.instancesnum-executorsspark.executor.cores无法在Spark独立模式下实现此目标,除了一个活动作业外,所有作业都将停留在WAITING状态。 Spark-standalone资源调度

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


1
我假设您在一台服务器上运行所有工作进程并尝试模拟集群。这种假设的原因是,如果不是这样,您可以使用一个工作进程和主节点来运行独立的Spark集群。
执行器核心与普通核心完全不同。要设置执行器数目,您需要打开YARN,正如您之前所说。执行器核心是执行器可以运行的并发任务数(在使用hdfs时,建议将此保持在5以下)[1]。

你想要限制用于运行工作进程的内核数,这些内核被称为“CPU内核”。它们在Spark 1.6.1的配置中指定[2]。在Spark中,启动从节点时有设置CPU内核数量的选项[3]。这是通过 -c CORES, --cores CORES 发生的,该选项定义允许Spark应用程序在机器上使用的总CPU内核数(默认为所有可用的内核数);仅限于工作节点。

启动Spark的命令可能如下所示:

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

希望这可以帮到你。


0
在配置设置中,将以下行添加到“./conf/spark-env.sh”文件中。 export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=1" 现在最大内核将限制为1个主节点。如果多个Spark应用程序正在运行,则仅使用一个内核进行主节点的操作。然后通过定义工作进程数量并将工作进程设置为: export SPARK_WORKER_OPTS="-Dspark.deploy.defaultCores=1" 每个工作进程也有一个内核。记住,这必须为配置设置中的每个工作进程设置。

1
这个答案是错误的。问题的目标是在“工作节点”集群中运行,这个答案只适用于本地作业。这个答案只适用于正在运行的主节点。主节点现在只会消耗一个核心。SPARK_MASTER_OPTS配置属性仅适用于主节点,格式为“-Dx=y”(默认值:无)。应该使用SPARK_WORKER_OPTS来调整工作节点的配置属性,格式为“-Dx=y”(默认值:无)。如果在工作节点上设置了核心,则此答案将适用。 - Paul Velthuis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接