2017-08-25 44 views
0

我有一個系統,其中REST API(Flask)使用spark-sumbit將作業發送到運行正常的pyspark。如何使火花同時運行工作中的所有任務?

由於各種原因,我需要spark來同時運行所有任務(即,我需要設置executors的數量=運行時的任務數量)。例如,如果我有20個任務,只有4個內核,我希望每個內核執行5個任務(執行程序),而不必重新啓動火花。

我知道我可以在啓動spark時設置執行程序的數量,但我不想這樣做,因爲spark正在執行其他作業。

這是否可以通過解決方法來實現?

+0

每一項工作可以有它自己的配置和作業提交參數一次不能修改。 –

+0

爲什麼靜態配置爲什麼不使用'spark.dynamicAllocation.enabled'動態分配資源? –

回答

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)