Pyspark Spark流媒体调度最佳实践

Pyspark Spark流媒体调度最佳实践,pyspark,spark-streaming,amazon-emr,amazon-kinesis,aws-data-pipeline,Pyspark,Spark Streaming,Amazon Emr,Amazon Kinesis,Aws Data Pipeline,我们有一个spark流媒体作业,每30分钟运行一次,完成该作业需要15秒。在这种情况下,建议的最佳实践是什么。我想我可以安排AWS datapipeline每30分钟运行一次,以便EMR在15秒后终止并重新创建。这是推荐的方法吗?对于需要15秒的作业,在EMR上运行它会浪费时间和资源,您可能需要等待几分钟,以便EMR群集启动 只有当您有一个长时间运行的作业时,AWS数据管道或AWS批处理才有意义 首先,确保你真的需要Spark,因为从你描述的情况来看,它可能是一种过度的杀伤力 具有CloudWa

我们有一个spark流媒体作业,每30分钟运行一次,完成该作业需要15秒。在这种情况下,建议的最佳实践是什么。我想我可以安排AWS datapipeline每30分钟运行一次,以便EMR在15秒后终止并重新创建。这是推荐的方法吗?

对于需要
15秒的作业,在EMR上运行它会浪费时间和资源,您可能需要等待几分钟,以便EMR群集启动

只有当您有一个长时间运行的作业时,AWS数据管道或AWS批处理才有意义

首先,确保你真的需要Spark,因为从你描述的情况来看,它可能是一种过度的杀伤力


具有CloudWatch事件调度的Lambda可能是您在没有基础设施管理的情况下完成如此快速作业所需的全部功能。

对于流式处理相关作业->关键是在您的情况下避免IO,因为作业似乎只需15秒。将消息推送到队列(AWS SQS)。有一个由Cloudwatch事件触发的AWS step函数(在您的情况下,每30分钟实现一个类似Cron的计划-调用AWS step函数),从SQS读取消息并在lambda中处理它们

因此,有一个选项(无服务器):

流式消息-->AWS SQS->(每隔30分钟cloudwatch会触发一个step函数)->该函数会触发lambda服务来处理队列中的所有消息

备选案文2:

流式消息-->AWS SQS->使用Python应用程序/Java Spring应用程序处理消息,该应用程序有一个计划任务,每30分钟唤醒一次,从队列中读取消息并在内存中处理


我使用了选项2来解决分析问题,尽管我的分析问题耗时10分钟,而且数据密集。此外,选项2还需要监控流程运行的虚拟机(容器)。另一方面,选项1是无服务器的。最后,这一切都归结为您已经准备好的软件堆栈和处理流数据所需的软件

如果它每30分钟运行一次,则更可能是一批而不是流式处理。你到底是如何使用Spark Streaming的?好的,我们有一个每天早上运行的批处理作业,然后是最后30分钟变化增量的流处理作业。Lambda可能不是最合适的,因为S3中有很多IO发生在这个作业中。但是我们可以通过设置合适的批量来实现。