Spark Streaming 调度最佳实践
Spark Streaming scheduling best practices
我们有一个 Spark Streaming 作业,每 30 分钟 运行s,需要 15 秒才能完成作业。在这种情况下建议的最佳做法是什么。我想我可以将 AWS 数据管道安排为每 30 分钟 运行,以便 EMR 在 15 秒后终止并重新创建。这是推荐的方法吗?
对于需要 15 seconds
运行 的作业,它在 EMR 上是浪费时间和资源,您可能需要等待几分钟才能让 EMR 集群 bootstrap。
AWS Data Pipeline 或 AWS Batch 仅在您的 运行 工作很长时才有意义。
首先,请确保您确实需要 Spark,因为根据您的描述,它可能有点矫枉过正。
具有 CloudWatch Event 计划的 Lambda 可能是您在无需管理基础设施的情况下快速完成工作所需的一切。
对于与流媒体相关的作业 -> 关键是在您的情况下避免 IO - 因为该作业似乎只需要 15 秒。将您的消息推送到队列 (AWS SQS)。有一个由 Cloudwatch 事件触发的 AWS step 函数(在你的案例中每 30 分钟执行一个像 Cron 这样的计划 - 调用 AWS Step 函数)从 SQS 读取消息并在 lambda 中理想地处理它们。
所以一个选项(无服务器):
流式消息 --> AWS SQS ->(每 30 分钟 cloudwatch 触发一个步骤函数)-> 触发 lambda 服务来处理队列中的所有消息
选项 2:
流式消息 ---> AWS SQS -> 使用具有计划任务的 Python application/Java Spring 应用程序处理消息,该任务每 30 分钟唤醒一次并从队列中读取消息并在内存中处理它。
我使用方案2解决了解析问题,虽然我的解析问题花了10分钟,而且是数据intensive.Option2另外,需要监控进程所在的虚拟机(容器)运行.另一方面,选项 1 是无服务器的。最后,这一切都归结为您已经拥有的软件堆栈以及处理流数据所需的软件。
我们有一个 Spark Streaming 作业,每 30 分钟 运行s,需要 15 秒才能完成作业。在这种情况下建议的最佳做法是什么。我想我可以将 AWS 数据管道安排为每 30 分钟 运行,以便 EMR 在 15 秒后终止并重新创建。这是推荐的方法吗?
对于需要 15 seconds
运行 的作业,它在 EMR 上是浪费时间和资源,您可能需要等待几分钟才能让 EMR 集群 bootstrap。
AWS Data Pipeline 或 AWS Batch 仅在您的 运行 工作很长时才有意义。
首先,请确保您确实需要 Spark,因为根据您的描述,它可能有点矫枉过正。
具有 CloudWatch Event 计划的 Lambda 可能是您在无需管理基础设施的情况下快速完成工作所需的一切。
对于与流媒体相关的作业 -> 关键是在您的情况下避免 IO - 因为该作业似乎只需要 15 秒。将您的消息推送到队列 (AWS SQS)。有一个由 Cloudwatch 事件触发的 AWS step 函数(在你的案例中每 30 分钟执行一个像 Cron 这样的计划 - 调用 AWS Step 函数)从 SQS 读取消息并在 lambda 中理想地处理它们。
所以一个选项(无服务器):
流式消息 --> AWS SQS ->(每 30 分钟 cloudwatch 触发一个步骤函数)-> 触发 lambda 服务来处理队列中的所有消息
选项 2:
流式消息 ---> AWS SQS -> 使用具有计划任务的 Python application/Java Spring 应用程序处理消息,该任务每 30 分钟唤醒一次并从队列中读取消息并在内存中处理它。
我使用方案2解决了解析问题,虽然我的解析问题花了10分钟,而且是数据intensive.Option2另外,需要监控进程所在的虚拟机(容器)运行.另一方面,选项 1 是无服务器的。最后,这一切都归结为您已经拥有的软件堆栈以及处理流数据所需的软件。