本质上,我们正在使用AWS上的Spark EMR集群运行批处理ML模型。模型会有几次迭代,所以我们希望在Spark集群之上有某种模型元数据端点。通过这种方式,依赖EMR集群输出的其他服务可以ping通spark集群的REST API端点,并获知它正在使用的最新ML系统版本。我不确定这是否可行。
目的:
我们希望其他服务能够ping通运行最新ML模型的EMR集群,并获得该模型的元数据,其中包括ML系统版本。
如果我理解正确,您想要添加元数据(例如,版本,最后更新,执行的操作等)在某个地方一旦spark作业完成,对吗?
可以有几种可能性,所有这些都将以与其他任务相同的方式以某种方式集成到您的数据管道中,例如,使用工作流管理工具(airflow/luigi), lambda函数甚至cron触发spark作业。
Spark作业运行后元数据更新
因此,对于post spark作业步骤,您可以在管道中添加一些东西,将此元数据添加到某些DB或事件存储中。我给你两个选项,你来决定哪一个更可行
- 使用cloudwatch事件并将lambda与事件关联。Amazon EMR自动将事件发送到CloudWatch事件流
- 在你的工作流管理工具(气流/luigi)中添加一个步骤,触发DB/事件存储更新步骤/操作符"on-completion";EMR阶跃函数。(例如,在气流中使用
EmrStepSensor
来发出下一步写入DB的操作)
For Rest-api on top of DB/event store
现在,一旦您为每个emr spark步骤运行设置了定期更新机制,您就可以使用EC2
或serverless API using AWS lambda
构建正常的rest API。实际上,您将从rest服务返回此元数据。