Synapse中如何为管道内所有Notebook共享一个Spark会话?
Azure Synapse管道中复用Spark会话的可行思路
交互式会话复用(管道参数传递)
在管道中,先通过第一个Notebook启动Spark会话,获取会话ID(可通过Notebook输出或Synapse系统变量提取)。后续所有Notebook活动配置为“附加到现有会话”,将该会话ID作为参数传入,实现复用。需确保所有Notebook使用同一个Spark池、同一执行身份,且会话未因空闲超时被回收。调整Spark池会话持久化配置
针对目标Spark池,修改核心参数:- 关闭动态分配:设置
spark.dynamicAllocation.enabled=false,避免会话因资源释放被销毁 - 延长空闲超时:在Spark池的“会话超时”设置中,将空闲时长调整为覆盖整个管道执行周期的时间
第一个Notebook启动的会话会保持活跃,后续Notebook在同一池执行时自动复用该会话。
- 关闭动态分配:设置
Notebook嵌套调用(单会话承载多逻辑)
用一个主Notebook启动会话,通过%run ./子Notebook路径命令依次调用其他Notebook。所有子Notebook会运行在主Notebook的同一个Spark会话中,这是无需额外配置的直接方案。REST API预创建会话
使用Synapse Spark REST API提前创建指定配置的Spark会话,获取会话ID后,在管道的每个Notebook活动中指定该ID作为会话标识。管道可通过Web活动调用API创建会话,将ID存入管道变量,后续Notebook活动引用该变量完成会话附加。
注意限制
- 复用会话仅限同一Spark池、同一执行身份
- 长时间保持会话会持续占用Spark资源,需平衡成本与需求
- 若会话意外终止,后续依赖该会话的Notebook活动会失败,需添加重试或容错逻辑
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

