如何将多个Spark作业提交到单个AWS EMR集群

8

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

我有以下疑问:

  1. 如何实现这些作业的并行运行?
  2. 有哪些自动化这些作业以备将来部署的方法?
  3. 如何处理预定作业(例如每15分钟运行一次的作业)?

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

1个回答

5
如果EMR中的多个步骤彼此不依赖,那么您可以在EMR中使用名为Concurrency的功能来解决您的使用情况。该功能意味着您可以同时并行运行多个步骤。
该功能从EMR版本5.28.0开始提供。如果您使用的版本早于此,则无法使用此功能。
在从AWS控制台启动EMR时,此功能在UI中被称为'Concurrency'。您可以选择1到256之间的任何数字。
如果您从AWS CLI启动EMR,则此功能被称为'StepConcurrencyLevel'
您可以在EMR中现在运行多个步骤AWS CLI详细信息中了解更多信息。
回答你关于如何处理计划作业的第二个问题:
有多种方法可以实现这一点。我能想到一种简单的方法是编写一个生成此EMR的Lambda函数。现在,可以在AWS CloudWatch中安排此Lambda函数以按您想要的任何频率运行(例如每15分钟或任何时间间隔)。您只需要提供一个Cron表达式,该表达式将决定触发此规则的频率。
因此,每次触发规则时,它都会执行您的Lambda函数。您的Lambda函数反过来将生成EMR。通过这种方式,您可以安排您的作业。

你的意思是要生成多个EMR集群吗?不太清楚。如果是这样,那么步骤并发级别肯定更好? - thebluephantom
@thebluephantom 这取决于使用情况。如果您想在很长时间后安排作业,比如每12小时运行一次,而作业本身只需要1小时,那么我会选择每12小时安排一次,而不是让EMR空闲这么长时间。但是,如果调度频率非常低,比如每15分钟一次,而作业完成时间也很短,那么我会选择在已创建的EMR中添加步骤,并使用“步骤并发”概念。就我从问题中理解的而言,他想要自动化,所以建议使用Lambda方式来生成多个EMR。 - Ajay Kr Choudhary
好的,我明白了,但是我确实是指并发。只是确认一下。谢谢。 - thebluephantom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接