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

时间:2017-08-25 23:43:39

标签: python apache-spark jvm pyspark bigdata

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

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

例如,如果我有20个任务且只有4个核心,我希望每个核心执行5个任务(执行程序),而不必重新启动spark。

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

这可以通过解决方案来实现吗?

1 个答案:

答案 0 :(得分:0)

使用spark调度程序池。下面是使用调度程序池运行多个查询的示例(一直到文章末尾,为了方便复制),同样的逻辑也适用于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)