我有一台装有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,并希望在已有足够的作业正在运行时将其排队。
我该如何实现?
答案 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