使用 Spark(1.6.1) 独立主机,我需要在同一个 Spark 主机上运行多个应用程序。
在第一个之后提交的所有应用程序,始终保持“等待”状态。我还观察到,一个运行包含所有核心的工人总数。我已经尝试通过使用它来限制它,SPARK_EXECUTOR_CORES
但它用于纱线配置,而我正在运行的是“独立主机”。我尝试在同一个主服务器上运行许多工作人员,但每次首次提交的应用程序都会消耗所有工作人员。
4 回答
我在 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
在 Spark 独立集群上并行运行多个作业的关键参数是spark.cores.max
. 请注意spark.executor.instances
,
num-executors
并且spark.executor.cores
仅此一项并不能让您在独立的 Spark 上实现这一点,除了一个活动的作业之外,您的所有作业都将停留在WAITING
状态。
独立集群模式目前仅支持跨应用程序的简单 FIFO 调度程序。但是,为了允许多个并发用户,您可以控制每个应用程序将使用的最大资源数。默认情况下,它将获取集群中的所有内核,这仅在您一次只运行一个应用程序时才有意义。您可以通过设置 spark.cores.max ... 来限制核心数量。
我假设您在一台服务器上运行所有工作人员并尝试模拟集群。这种假设的原因是,如果不是这样,您可以使用一个工作人员和一个主服务器来运行独立的 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
希望这可以帮助
在配置设置中将这一行添加到“./conf/spark-env.sh”这个文件中。
导出 SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=1"
现在,master 的最大核心数将限制为 1。如果多个 Spark 应用程序正在运行,那么它将只使用一个核心作为主控。然后定义工人的数量并为工人提供设置:
导出 SPARK_WORKER_OPTS="-Dspark.deploy.defaultCores=1"
每个工人也有一个核心。请记住,必须在配置设置中为每个工作人员进行设置。