我需要开发一个事件驱动的管道,它应该在文件到达ADLS2即ABFS时触发。在文件到达时,我需要在Azure Databricks集群上触发4个后续Spark作业。
为了编排Spark作业,我可以使用Databricks作业作为一个选项,这样作业就可以在管道中被触发。
但是第一个作业应该在文件到达后才被触发。
我目前正在探索实现这一目标的方法,但需要专家建议以尽可能好的方式设计它。
一个解决方案可能是使用Azure数据工厂来编排基于存储事件触发器组件的整个流程,但仅仅因为基于事件的触发器而使用ADF对我来说似乎不可行,因为应用程序的其余部分,即Spark作业可以从Databricks Job特性流水线化。
此外,在成本方面,ADF可能是昂贵的。
另一个解决方案可能是使用Azure函数Blob触发器来知道文件到达,但我无法理解如何从Azure函数触发Azure Databricks作业。使用函数可以节省成本,因为函数在文件到达之前不会运行/活动。
注意:一个小时内可能有多个文件到达。文件到达时间不固定
另外,触发器文件不同于数据文件。即,在触发文件到达时,Spark管道将消耗实际的数据文件。
数据文件和触发器文件有不同的扩展名,它们都到达ABFS。
您对ADF成本的担心是多余的。管道非常便宜。实际移动数据和使用CPU的活动是大部分成本所在。例如,数据流运行在托管Spark集群上,这反映在定价上。参见数据工厂定价。使用Pipeline来编排Databricks作业是一种常见、简单且(至少对于ADF)非常便宜的方法。
如果你想从Azure函数中启动一个Databricks作业,有一个API。也可以查看Databricks自动加载器,但是连续运行Databricks集群可能会很昂贵。