如何同时运行2个EMR Spark步骤?

时间:2018-11-04 13:03:49

标签: apache-spark yarn amazon-emr

我试图在EMR中同时运行2个步骤。但是,我总是使第一步运行,第二步未完成。

我的Yarn配置的一部分如下:

{
    "Classification": "capacity-scheduler",
    "Properties": {
    "yarn.scheduler.capacity.resource-calculator": "org.apache.hadoop.yarn.util.resource.DominantResourceCalculator",
    "yarn.scheduler.capacity.maximum-am-resource-percent": "0.5"
    }
  }

当我在本地Mac上运行时,我可以在Yarn上以类似配置运行第二个应用程序,其中的更改实际上是火花提交资源请求,以匹配所需的群集容量和性能。

换句话说,我的纱线设置为运行多个应用程序。

因此,在我深入研究它之前,我想知道实际上是否可以同时执行该步骤或仅连续执行该步骤?

还有其他提示或特定要同时运行的内容吗?

关于每个作业请求,我的集群容量过大。因此,我不明白为什么它不能同时运行。

5 个答案:

答案 0 :(得分:5)

  • 是否可以使步骤同时运行或仅连续运行?

    • 由AWS支持人员确认,我们不能并行(并行)运行多个步骤,这些步骤是串行的,因此您所看到的(即处于待处理状态的第二份工作)是可以预期的。
  • 是否有任何提示或特定内容可同时运行?

    • 您可以简单地将两个spark-submit都放入bash脚本中并运行bash脚本,但是您可以在AWS Web控制台(已经很慢的imo)上放一些直接调试信息,您可以在上看到这些调试信息。 spark-history server

On your local mac, you are able to run multiple YARN application in parallel because you are submitting the applications to yarn directly, whereas in EMR the yarn/spark applications are submitted through AWS's internal `command-runner.jar`, it does a bunch of other logging/bootstrapping etc to be able to see the `emr step` info on the web console.

答案 1 :(得分:2)

AWS EMR Yarn中有两种运行应用程序的模式:

  • 客户
  • 集群

如果使用客户端模式,则在给定时间只有一步处于运行状态。 但是,有一个选项可以让您同时运行多于1个步骤。

尝试以打击模式提交您的步骤: spark-submit --master yarn --deploy-mode cluster --executor-memory 1G --num-executors 2 --driver-memory 1g --executor-cores 2 --conf spark.yarn.submit.waitAppCompletion = false-类WordCount.word.App /home/hadoop/word.jar

  1. 不要让AWS EMR定义内存分配,而是尝试定义您的分配。请参阅链接:http://site.clairvoyantsoft.com/understanding-resource-allocation-configurations-spark-application/
  2. spark.yarn.submit.waitAppCompletion = false:在YARN群集模式下,控制客户端是否等待退出直到应用程序完成。如果设置为true,则客户端进程将保持活动状态,报告应用程序的状态。否则,客户端进程将在提交后退出。

希望这对您有所帮助。

答案 2 :(得分:1)

AWS现在允许您在更高版本的EMR中同时运行步骤。 https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-emr-now-allows-you-to-run-multiple-steps-in-parallel-cancel-running-steps-and-integrate-with-aws-step-functions/

执行此操作时要注意的一件事是照顾资源,因为您的应用程序将争夺可用资源,并且其中一个应用程序可能最终处于接受状态,直到另一个应用程序完成后才开始运行,从而破坏了目的。

答案 3 :(得分:0)

您始终可以将步骤放在后台。如果您处理日志记录和竞争条件,应该不会有问题。

step-job.sh

#!/bin/bash

function main(){
    do_this
    do_that
}

if [[ "$1" == "1" ]]; then
    main
else
    /bin/bash "$0" 1 $@ &
fi

答案 4 :(得分:0)

看起来AWS终于在EMR 5.28.0中实现了此功能!

该参数在控制台向导中称为“并发”,在API中称为StepConcurrencyLevel

  

指定可以同时执行的步骤数。默认值为1。最大值为256。