将计划程序池用于多个流式处理工作负荷
若要允许多个流式处理查询在共享群集中并发执行作业,可以将查询配置为在单独的计划程序池中执行。
计划程序池的工作原理是什么?
默认情况下,笔记本中启动的所有查询都在同一公平计划池中运行。 由触发器根据笔记本中的所有流式处理查询生成的作业将按照先入先出 (FIFO) 的顺序逐一运行。 这可能会导致查询中产生不必要的延迟,因为它们不能有效地共享群集资源。
通过计划程序池,可声明哪些结构化流式处理查询共享计算资源。
以下示例将 query1
分配给专用池,而 query2
和 query3
共享一个计划程序池。
# 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 公平计划程序文档。