web-dev-qa-db-ja.com

2 EMRを実行する方法Sparkステップを同時に実行しますか?

EMRで2つのステップを同時に実行しようとしています。ただし、常に最初のステップを実行し、2番目のステップを保留にします。

私の糸の構成の一部は次のとおりです:

{
    "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で実行すると、2つのアプリケーションを同様の構成でYarnで実行できます。変更は実際にはspark submit resource request)で、必要なクラスターの容量とパフォーマンスに一致します。

言い換えると、私の糸は複数のアプリケーションを実行するように設定されています。

したがって、私はそれに深く掘り下げる前に、実際にステップを同時に実行することはできますか、それとも逐次的にのみ実行することは可能ですか?

他に、同時に実行するために実行するためのヒントや何かありますか?

私のクラスターは、各ジョブが要求するものに関して、容量が過剰です。したがって、同時に実行できない理由がわかりません。

7
MaatDeamon
  • ステップを同時に実行することはできますか、それとも逐次的にのみ実行できますか?

    • AWSサポート担当者から、複数のステップを並行して(並行して)実行できないことを確認しました。ステップはシリアルであるため、表示されるもの(つまり、保留中の2番目のジョブ)が予想されます。
  • 同時に実行するためのヒントや何か何かありますか?

    • 単に両方のspark-submitをbashスクリプトに入れてbashスクリプトを実行することができますが、AWSのウェブコンソールで直接のデバッグ情報がいくらか失われる可能性があります(これは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._

5
Naveen Cotha

AWS EMRヤーンでアプリケーションを実行するには、2つのモードがあります。

  • クライアント
  • 集まる

クライアントモードを使用する場合は、一度に1つのステップのみが実行状態になります。ただし、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に設定されている場合、クライアントプロセスはアプリケーションのステータスを報告し続けます。それ以外の場合、クライアントプロセスは送信後に終了します。

これがあなたのために役立つことを願っています。

2
Jack

あなたはいつもバックグラウンドでステップを置くことができます。ロギングと競合状態を処理する場合は問題になりません。

step-job.sh

#!/bin/bash

function main(){
    do_this
    do_that
}

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