如何在Spark Standalone集群中提交多个作业?

时间:2019-03-29 07:18:01

标签: scala apache-spark

我有一台装有Apache Spark的计算机。机器是64GB RAM 16 Cores

我在每个火花工作中的目标

1. Download a gz file from a remote server
2. Extract gz to get csv file (1GB max)
3. Process csv file in spark and save some stats.

目前,我通过执行以下操作为收到的每个文件提交一份作业

./spark-submit --class ClassName --executor-cores 14 --num-executors 3 --driver-memory 4g --executor-memory 4g jar_path

等待此作业完成,然后为新文件启动新作业。

现在,我想通过并行运行多个作业来利用64GB RAM。

我可以为每个作业分配4g RAM,并希望在已有足够的作业正在运行时将其排队。

我该如何实现?

1 个答案:

答案 0 :(得分:2)

您应该从不同的线程提交多个作业:

https://spark.apache.org/docs/latest/job-scheduling.html#scheduling-within-an-application

并配置池属性(将scheduleMode设置为FAIR):

https://spark.apache.org/docs/latest/job-scheduling.html#configuring-pool-properties

从Spark Doc:

https://spark.apache.org/docs/latest/spark-standalone.html#resource-scheduling

  

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

默认情况下,它将所有资源用于一个作业。我们需要定义资源,以便它们也有空间运行其他作业。以下是可用于提交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