scala - 如何在 Spark Standalone 集群中提交多个作业?
问题描述
我有一台装有 Apache Spark 的机器。机是64GB RAM 16 Cores
。
我在每个 Spark 工作中的目标
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,并希望在有足够的作业已经运行时将我的作业排队。
我怎样才能做到这一点?
解决方案
您应该从不同的线程提交多个作业:
https://spark.apache.org/docs/latest/job-scheduling.html#scheduling-within-an-application
并配置池属性(将 schedulingMode 设置为 FAIR):
https://spark.apache.org/docs/latest/job-scheduling.html#configuring-pool-properties
来自 Spark 文档:
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
推荐阅读
- javascript - 匹配图片javascript基本益智游戏
- c++ - 令人困惑的成语名称 RAII
- flutter - 在颤动中使用可触摸的自定义油漆点击时如何改变颜色?
- flutter - keeping repository instance "alive" with bloc
- django - Django NoReverseMatch - Amadeus API
- api - 详细信息在我的请求中可见,如何在我的 API 请求中过滤?
- react-native - 即使应用程序关闭,如何在预定时间自动启动应用程序以响应本机?
- mule - 如何在转换消息 mule 3 中使用通配符?
- scala - scala 猫遍历列表
- python - 有没有办法在 NetworkX 中找到节点之间的双向关系?