求助:ADF中Synapse Notebook活动无法调用其他Notebook的解决方案
解决ADF中Synapse Notebook活动调用子Notebook失败的问题
以下是针对该问题的具体解决方案:
- 调整参数传递格式
ADF执行上下文和直接运行Notebook的环境存在差异,原代码中嵌套的{"notebookparams": ...}格式可能无法被正确解析。尝试直接传递参数字典(如果Job_configInfo_dicencoded是解码后的字典):
mssparkutils.notebook.run(notebook_name, 90, Job_configInfo_dicencoded)
如果Job_configInfo_dicencoded是编码后的字符串,需先在父Notebook中解码为字典,再传递给子Notebook,子Notebook内做对应解析处理。
核验权限配置
- 确认ADF使用的托管标识/服务主体,在Synapse Studio中拥有目标Notebook的运行权限(至少分配「Notebook运行者」角色)。
- 检查子Notebook依赖的所有资源(如ADLS存储、SQL池等),是否对该ADF标识开放了必要的访问权限,避免因权限不足导致调用中断。
优化超时设置
ADF中Notebook活动的默认超时逻辑和直接运行不同,可适当调大mssparkutils.notebook.run的超时参数,比如从90秒改为300秒:
mssparkutils.notebook.run(notebook_name, 300, {"notebookparams": Job_configInfo_dicencoded})
同时确保ADF的Synapse Notebook活动本身的超时设置,大于子Notebook的预期运行时长。
- 添加日志定位问题
在父Notebook的调用逻辑中增加日志输出,便于排查参数传递和执行异常:
print(f"待调用Notebook路径: {notebook_name},传递参数: {Job_configInfo_dicencoded}") try: run_result = mssparkutils.notebook.run(notebook_name, 90, {"notebookparams": Job_configInfo_dicencoded}) print(f"子Notebook调用成功,返回结果: {run_result}") except Exception as error: print(f"子Notebook调用失败,错误详情: {str(error)}")
之后查看ADF的活动运行日志,以及Synapse工作区的作业日志,定位具体错误点。
- 改用ADF参数传递机制
如果mssparkutils.notebook.run在ADF环境存在兼容性问题,可以通过ADF直接给父Notebook传参,再由父Notebook转发:- 在ADF的Synapse Notebook活动中,配置自定义参数(比如
encoded_config),值设为你的Job_configInfo_dicencoded内容。 - 父Notebook中读取该参数:
- 在ADF的Synapse Notebook活动中,配置自定义参数(比如
Job_configInfo_dicencoded = spark.conf.get("spark.notebook.param.encoded_config")
- 再调用子Notebook时传递解析后的参数。
内容的提问来源于stack exchange,提问作者Madhu Tallapaneni
相关产品推荐
相关产品推荐

