如何使火花同时运行作业中的所有任务?

Posted

技术标签:

【中文标题】如何使火花同时运行作业中的所有任务?【英文标题】:How to make spark run all tasks in a job concurrently? 【发布时间】:2017-08-25 23:43:38 【问题描述】:

我有一个系统,其中 REST API (Flask) 使用 spark-sumbit 将作业发送到正在运行的 pyspark。

由于各种原因,我需要spark同时运行所有任务(即我需要设置执行器的数量=运行时的任务数量)。

例如,如果我有 20 个任务并且只有 4 个核心,我希望每个核心执行 5 个任务(执行器)而无需重新启动 spark。

我知道我可以在启动 spark 时设置执行器的数量,但我不想这样做,因为 spark 正在执行其他作业。

这是否可以通过变通来实现?

【问题讨论】:

每个作业都可以有自己的配置,一旦作业提交参数就不能修改。 为什么静态配置为什么不用spark.dynamicAllocation.enabled动态分配资源? 【参考方案1】:

使用火花调度程序池。这是一个使用调度程序池运行多个查询的示例(一直到文章末尾,为了方便复制这里),相同的逻辑也适用于 DStreams: https://docs.databricks.com/spark/latest/structured-streaming/production.html

// Run streaming query1 in scheduler pool1
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool1")
df.writeStream.queryName("query1").format("parquet").start(path1)

// Run streaming query2 in scheduler pool2
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool2")
df.writeStream.queryName("query2").format("orc").start(path2)

【讨论】:

以上是关于如何使火花同时运行作业中的所有任务?的主要内容,如果未能解决你的问题,请参考以下文章

替代递归运行Spark-submit作业

如何从 SLURM 中的节点列表向任何 [子集] 节点提交作业?

火花任务未开始执行

使用火花动作在 Oozie 中的 python Spark 作业

如何停止火花流作业?

Beanstalkd 在伪造队列工作人员上同时运行队列中的所有作业