【问题标题】:How to submit multiple spark jobs to single AWS EMR cluster如何将多个 Spark 作业提交到单个 AWS EMR 集群
【发布时间】:2020-11-08 10:44:37
【问题描述】:

我正在尝试向 EMR 集群提交多个作业,但我只看到第一个处于运行状态,其余的都处于已接受状态。我的大部分工作都是流式工作。

我有以下疑问:

  1. 如何实现这些作业的并行运行?
  2. 自动化这些作业以供将来部署的各种方法是什么?
  3. 如何处理计划作业(例如每 15 分钟运行一次的作业)?

我正在使用 Java 进行开发。任何输入都会非常有帮助。

【问题讨论】:

    标签: java apache-spark spark-streaming amazon-emr


    【解决方案1】:

    如果 EMR 中的多个步骤不相互依赖,那么您可以使用 EMR 中名为 Concurrency 的功能来解决您的用例。此功能仅意味着您一次可以并行运行多个步骤。

    此功能来自 EMR 版本 5.28.0。如果您使用的是旧版本,则无法使用此功能。

    从 AWS 控制台启动 EMR 时,此功能在 UI 中称为'并发'。您可以选择 1 到 256 之间的任何数字。

    如果您从 AWS CLI 启动 EMR,则此功能称为 'StepConcurrencyLevel'

    您可以在multiple steps now in EMR AWS CLI details 阅读更多相关信息

    回答您关于如何处理计划作业?

    的第二个问题

    有多种方法可以做到这一点。我能想到的一种简单方法是编写一个 lambda 函数来生成这个 EMR。现在,可以在 AWS cloudwatch 中安排这个 lambda 函数以您想要的任何频率运行(比如每 15 分钟或任何时间间隔)。您只需要提及一个 Cron 表达式,它将决定触发此规则的频率。

    因此,每次触发规则时,它都会执行您的 lambda 函数。而你的 lambda 函数反过来会产生 EMR。通过这种方式,您可以安排您的工作。

    【讨论】:

    • 您的意思是生成多个 EMR 集群吗?不清楚。如果是这样,那么 Step Concurrency Level 肯定更好?
    • @thebluephantom 这取决于用例,如果你想在很长一段时间后安排作业,比如每 12 小时一次,而你的作业本身在 1 小时内运行,那么我想安排这个12 小时,而不是让 EMR 闲置这么长时间。但是如果调度频率非常少说每 15 分钟一次,并且作业完成时间也更少,那么我会选择在已经创建的 EMR 中添加步骤并使用Step Concurrency 的概念。据我从问题中了解到,他想将其自动化,因此建议使用 lambda 方式来生成多个 EMR。
    • 好的,明白了,但我的意思是并发。只是检查。谢谢。
    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 2019-05-30
    • 2019-08-21
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多