こんにちは私はSparkアルゴリズムの2つの異なるクラスタでのパフォーマンスを比較しています。 1つは計算能力が高く、もう1つはメモリ効率が高い。計算最適化されたインスタンスを持つASWでSparkアプリケーションを実行する問題
- クラスタ1は4のvCPUとメインメモリの 7.5GiBとAWSインスタンスの5つのノードc4.xlargeを有しています。
- クラスタ2には5ノードのAWSインスタンスがあります。r4.xlarge(vCPUは4つ、メインメモリは30.5 GiB)。
私のコードは13段階に分かれていますが、最後の5段階だけが実際に私がパフォーマンスの面倒を見る必要があるものです。以下、これら5:
上の写真は、あなたがステージ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の主メモリが少ないという問題はありますか?
私と協力して答えを見つけてくれてありがとう。