Azure Synapse:如何让不同管道并行运行同一Spark Notebook
解决Azure Synapse中Spark Notebook并行执行问题
核心原因分析
你的问题本质是Spark池的资源/并发配置不足以支撑两个Notebook实例同时运行,主要涉及以下两点:
- Small Spark池的资源限制:Small规格仅包含1个计算节点,默认的节点并发作业配额较低,无法同时容纳两个独立的Notebook Spark作业。
- Spark Session标识重复:代码中硬编码了固定的
appName("MyApp"),多个实例使用相同的Session名称可能导致调度逻辑误判为同一作业,进而串行排队。
具体解决方案
1. 调整Spark池的并发作业配额
在Azure Synapse Studio中修改目标Spark池的配置:
- 进入Spark池管理页面,找到你的small池
- 编辑池配置,找到并发作业数选项(通常在“高级”设置分组中)
- 将数值调高至2或以上(Small池建议设为2,避免资源过载)
2. 优化Spark Session的命名
修改Notebook中SparkSession的appName,为每个实例生成唯一标识,避免调度冲突:
spark = SparkSession.builder \ .appName(f"MyApp_{p_table_name}") # 加入参数作为名称后缀,确保每个实例标识唯一 .config("spark.jars.packages", "com.microsoft.sqlserver:mssql-jdbc:9.4.1.jre11,org.apache.hadoop:hadoop-azure:3.3.1") \ .getOrCreate()
3. 升级Spark池规格(可选)
如果调整并发配额后仍存在资源不足的问题,可以考虑将Small池升级为Medium或更大规格:
- Medium池包含2个计算节点,天然具备更高的并发能力
- 更大的池规格能提供更多CPU、内存资源,支持更多并行作业
4. 确认管道无串行依赖
检查两个管道(pipeline_table1和pipeline_table2)的配置,确保它们之间没有设置依赖关系,且都是独立触发执行的。
内容的提问来源于stack exchange,提问作者Sanket Kelkar
相关产品推荐
相关产品推荐

