我有4个Spark应用程序(从文本文件中查找字数),它用4种不同的语言(R,python,java,scala)编写
./wordcount.R
./wordcount.py
./wordcount.java
./wordcount.scala
火花在独立模式下工作... 1.4工作节点 2.1 每个工作节点的核心 每个节点 3.1GB 内存 4.core_max设置为 1
./conf/spark-env.sh
export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=1"
export SPARK_WORKER_OPTS="-Dspark.deploy.defaultCores=1"
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=1g
export SPARK_WORKER_INSTANCES=4
我使用终端上的文件提交了 Spark 应用程序 pgm.sh
./bin/spark-submit --master spark://-Aspire-E5-001:7077 ./wordcount.R &
./bin/spark-submit --master spark://-Aspire-E5-001:7077 ./wordcount.py &
./bin/spark-submit --master spark://-Aspire-E5-001:7077 ./project_2.jar &
./bin/spark-submit --master spark://-Aspire-E5-001:7077 ./project_2.jar
当每个进程单独执行时,需要 2 秒。 当所有进程使用终端上的文件执行.sh需要 5 秒到 6 秒
如何并行运行不同的 Spark 应用程序? 如何将每个Spark应用程序分配给单个核心?
编辑:在独立模式下,根据文档,您只需将spark.cores.max
设置为小于独立集群大小的值,并且还建议为未显式设置此设置的应用程序设置spark.deploy.defaultCores
。
原始答案(假设这是在本地或 YARN 中运行的):当您提交多个 Spark 应用程序时,它们应该自动并行运行,前提是您正在运行的集群或服务器配置为允许这样做。例如,默认情况下,YARN 集群将并行运行应用程序。请注意,并行运行的应用程序越多,资源争用的风险就越大。
关于"如何将每个 Spark 应用程序分配给单个核心":您不需要,Spark 处理从工作线程到核心的调度。您可以配置每个工作线程执行程序使用多少资源,但这些资源的分配取决于调度程序(无论是 Spark、Yarn 还是其他一些调度程序)。