0

こんにちは私はSparkアルゴリズムの2つの異なるクラスタでのパフォーマンスを比較しています。 1つは計算能力が高く、もう1つはメモリ効率が高い。計算最適化されたインスタンスを持つASWでSparkアプリケーションを実行する問題

  1. クラスタ1は4のvCPUとメインメモリの 7.5GiBとAWSインスタンスの5つのノードc4.xlargeを有しています。
  2. クラスタ2には5ノードのAWSインスタンスがあります。r4.xlarge(vCPUは4つ、メインメモリは30.5 GiB)。

私のコードは13段階に分かれていますが、最後の5段階だけが実際に私がパフォーマンスの面倒を見る必要があるものです。以下、これら5:

enter image description here

上の写真は、あなたがステージ11と13を参照することができ、クラスタ2(メモリ効率)に私のコードを実行している段階の統計はflatMapので、数分かかる示し地図は、それぞれリスト上で重い逐次作業を行います。

ジョブ・ステージ11と13は、各パーティションで順次実行されるため、クラスタ1(計算効率)を使用して2つのステージのパフォーマンスを向上させることが期待されますが、実際にクラスタ1で実行すると、 3ステージは32タスクしか実行しないため(32パーティションのみ)、実行時間は各ステージで2分以上遅くなりました。

私は3人のエグゼキュータしか実行していないので、実際には4つのインスタンスのうち3つだけが問題に取り組んでいることに気付きました。そして、どのような私は、アプリをこのように提出されたんでした:

spark-submit --master yarn --deploy-mode cluster —-num—executors 4 --executor-cores 4 --class myclass myjar myparams 

は、だから私は—-num—executors 4にエグゼキュータの数を強制的に1つのキュータが、何の関係も取得する第四ノードを強制するだろうと思いました。それはどちらもうまくいきませんでした。 3人のエグゼキュータだけが3つのインスタンスでアクティブでした。

この問題は確かです。シーケンシャルステージはクラスタ1上でより速く走らなければならないと思いませんか?クラスタ1の主メモリが少ないという問題はありますか?

私と協力して答えを見つけてくれてありがとう。

答えて

1

EMRでリソースを最適に使用するには、構成の微調整と、YARNの仕組みに関する少しの知識が必要です。 YARNでアプリケーションを調整する方法の概要を知るために、Clouderaのthis blog postを読むことを強くお勧めします。

とにかく、この特定のケースでは、4ではなく3つのエグゼキュータが表示されるのは、各エグゼキュータが4つのコア(フラグ--executor-cores 4)を持つように指定したためです。各作業者は4つのコアしか使用できないため、YARNはアプリケーションマネージャを実行するために1つのコアで1つのコアを使用するため、4つのコアを使用できる3つのワーカーと、3つのコアを使用できる1つのワーカーがあります。利用可能なコアが3つのワーカーは、4つのコアを必要とするエグゼキュータを実行することができないため、エグゼキュータはこのワーカーに単純に記述されていません。これにより、3人のエグゼクティブがあなたを残します。とにかく

、上記のブログ記事は

ああ:)詳細にこれを説明し、かつ型クラスタがより速く実行されるという点で、あなたはそれをテストする必要があります。私はあなたの理論的な考え方に従っていますが、私は長い間、どのタイプのクラスタが特定のタスクに適しているかを予測しようとしています。真実は、スパークが実行計画をどのように作成するかを完全に理解していない限り、基本的には推測に過ぎません。異なるインスタンスタイプをテストし、Gangliaを使用して、クラスタがさまざまなリソースをどのように利用しているかを監視することをお勧めします。

関連する問題