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



我正在尝试在EMR中同时运行两个步骤。然而,我总是让第一步运行,第二步挂起。

我的纱线配置如下:

{
"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-submit资源请求,以匹配所需的集群容量和性能。

换句话说,My yarn被设置为运行多个应用程序。

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

否则,是否有任何提示或特定的东西可以同时运行到作业?

我的集群在每个工作请求方面都能力过剩。因此,我不明白为什么它不能同时运行。

  • 是否可以同时或仅串行运行该步骤?

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

看来AWS最终在EMR 5.28.0中实现了这一功能!

该参数在控制台向导中称为"并发",或在API中称为StepConcurrencyLevel:

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

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

  • 客户端
  • 群集

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

尝试在blow模式下提交步骤:spark-submit--master yarn--部署模式集群--执行器内存1G--num执行器2--驱动程序内存1G--执行器内核2--conf spark.yarn.submit.waitAppCompletion=false--class WordCount.word.App/home/hadop/word.jar

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

希望这能对你有所帮助。

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/

在执行此操作时需要注意的一件事是要注意资源,因为您的应用程序将为可用资源而斗争,其中一个应用程序可能最终处于可接受状态,直到另一个完成才启动,从而破坏目的。

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

stepjob.sh

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

相关内容

  • 没有找到相关文章

最新更新