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