複数のストリーミングワークロードにスケジューラプールを使用する

複数のストリーミングクエリが共有クラスタでジョブを同時に実行できるようにするには、クエリーを別々のスケジューラプールで実行するように構成します。

スケジューラプールはどのように機能しますか?

デフォルトにより、すべてのクエリーは、同じ 均等スケジューリングプールで実行されるノートブックで開始されます。 ノートブック内のすべてのストリーミングクエリーのトリガーによって生成されたジョブは、先入れ先出し (FIFO) の順序で次々に実行されます。 これにより、クエリーがクラスター リソースを効率的に共有していないため、クエリーに不要な遅延が発生する可能性があります。

スケジューラ プールを使用すると、コンピュート リソースを共有する構造化ストリーミング クエリーを宣言できます。

次の例では、 query1 を専用プールに割り当て、 query2query3 はスケジューラ プールを共有します。

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

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

# Run streaming query3 in scheduler pool2
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool2")
df.writeStream.queryName("query3").format("delta").start(path3)

ローカルプロパティの設定は、ストリーミングクエリーを開始するのと同じノートブックセルにある必要があります。

詳細については、 Apache フェアスケジューラのドキュメント を参照してください。