【问题标题】:How to run 2 EMR Spark Step Concurrently?如何同时运行 2 个 EMR Spark 步骤?
【发布时间】:2019-04-08 00:41:34
【问题描述】:

我正在尝试在 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 上以类似配置运行 2 应用程序,其中更改实际上是 spark 提交资源请求,以匹配所需的集群容量和性能。

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

因此,在我深入研究之前,我想知道是否真的可以让该步骤同时运行或仅串行运行?

还有什么技巧或特定的东西可以同时运行到工作吗?

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

【问题讨论】:

  • 如果您通过 spark 本身(例如使用 sc.parallelize)提前知道这两个任务,则可以并行执行。但也许这不是你要找的。​​span>
  • 感谢您的来信。你能详细说明你的答案吗?所以我可能会弄清楚它是否可以达到我的目的。顺便说一句,这是两个应用程序,2 个使用 EMR 步骤提交火花。
  • 我的意思是,如果你在一个项目中有这两个任务的代码,以便它们可以从同一个地方运行,那么你可以用 sc.parallelize 将它们包装在一个任务中执行并行。

标签: apache-spark hadoop-yarn amazon-emr


【解决方案1】:
  • 是否可以让步骤同时运行或仅串行运行?

    • 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.

【讨论】:

    【解决方案2】:

    看来AWS终于在EMR 5.28.0中实现了这个功能!

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

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

    【讨论】:

      【解决方案3】:

      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 - -class 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,客户端进程将保持活动状态并报告应用程序的状态。否则,客户端进程将在提交后退出。

      希望这对您有所帮助。

      【讨论】:

        【解决方案4】:

        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/

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

        【讨论】:

          【解决方案5】:

          您始终可以将步骤置于后台。如果您处理日志记录和竞争条件,这应该不是问题。

          step-job.sh

          #!/bin/bash
          
          function main(){
              do_this
              do_that
          }
          
          if [[ "$1" == "1" ]]; then
              main
          else
              /bin/bash "$0" 1 $@ &
          fi
          

          【讨论】:

            猜你喜欢
            • 2017-08-24
            • 2021-12-22
            • 1970-01-01
            • 1970-01-01
            • 2018-10-19
            • 2020-08-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多