Spark Streaming调度最佳实践

时间:2019-02-03 02:58:58

标签: pyspark spark-streaming amazon-emr amazon-kinesis aws-data-pipeline

我们有运行,每30分钟,并采取15秒完成作业的火花流工作。什么是建议在此情况下的最佳实践。我想我可以安排AWS datapipeline每30分钟运行,从而EMR 15秒后结束,将被重建。是推荐的方法吗?

2 个答案:

答案 0 :(得分:1)

对于需要15 seconds在EMR上运行的作业,这是浪费时间和资源,因此,您可能需要等待几分钟才能启动EMR群集。

仅当您的工作时间较长时,AWS数据管道或AWS Batch才有意义。

首先,请确保您确实需要Spark,因为按照您的描述,这可能会过大。

具有CloudWatch Event调度功能的Lambda可能是您需要如此快速的工作而无需管理基础架构的全部功能。

答案 1 :(得分:0)

对于与流相关的作业->关键是要避免发生IO-因为该作业似乎只需要15秒。将您的消息推送到队列(AWS SQS)。让Cloudwatch事件触发一个AWS Step函数(在您的情况下,每30分钟执行一次Cron这样的时间表-调用AWS Step函数)以从SQS读取消息并理想地在lambda中对其进行处理。

所以一种选择(无服务器):

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

https://aws.amazon.com/getting-started/tutorials/scheduling-a-serverless-workflow-step-functions-cloudwatch-events/

选项2:

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

尽管我的分析问题花了10分钟并且需要大量数据,但我还是使用了选项2解决了问题。此外,选项2还需要监视运行过程的虚拟机(容器)。另一方面,选项1是无服务器的。最后,所有这些都取决于您已经拥有的软件堆栈以及处理流数据所需的软件。