我有一个后台服务,可以在Google Cloud Storage中生成文件。完成后,它将在输出文件夹中生成一个文件。
在我的流程中,我需要获取这些文件的列表,并使用文件列表启动DataProc Spark作业。处理不是实时的,需要数十分钟。
GCS具有notifications系统。它可以将通知流式传输到发布/订阅服务。
在GCS中,将创建一个文件.../feature/***/***.done
来标识服务作业的完成情况。
创建文件后,通知将发布到发布/订阅服务。
我相信我可以编写可以读取此通知的Cloud Function,通过某种魔术,它可以获取已修改文件的位置,并能够列出该文件夹中的所有文件。然后将另一条包含所有必需信息的消息发布到Pub / Sub
理想情况下,最好使用Jobs而不是Streaming来降低成本。这可能意味着PubSub启动Job而不是流式传输Job从PubSub中提取新消息
答案 0 :(得分:1)
问题1:我可以通过通配符在GCS中订阅新文件吗?
您可以设置GCS通知以按路径前缀进行过滤。请参阅-p选项here。 Cloud Pub / Sub在Beta中也有filtering-by-attribute API。您可以使用它根据GCS设置的attributes进行过滤。 filtering language支持GCS设置的属性的完全匹配和前缀检查。
发布到Cloud Pub / Sub主题的消息将具有为您提供对象的存储桶和名称的属性,因此您应该能够轻松读取该存储桶/子路径中的其他文件。
问题2:是否可以通过发布/订阅通知来启动DataProc作业?
是的,您可以设置一个Cloud Function以从您的Cloud Pub / Sub主题进行订阅。然后,该函数可以使用DataProc client library启动DataProc集群,或执行任何其他操作。