関係excutorにおけるスパークの数、メモリサイズ、コアの数、タスクのリソースの数、パーティションの数、クラスタ、など

ディレクトリ

 

図1に示すように、これら二つの領域の実質的にスパークチューニングリソース割当コアMEM

 

(1)、どのリソース割り当て?

(2)、これらのリソースの配分?

(3)、どのくらいに調整、それが最大のでしょうか?

将来的にリソースを調整するのはなぜ(4)、パフォーマンスが改善できますか?

2、パーティションの数とタスクの数との関係

3、チューニング並列スパークの合理的なセット

(1)、意味するところの並列処理スパーク度?

(2)、どのように並列度を向上させるには?

 


1 のリソース割り当てスパークチューニング   一般に二つの側面コアMEM

 

(1)、どのリソース割り当て?

   エグゼキュータ、エグゼキュータ当たりのコア、エグゼキュータ当たりのメモリ、ドライバメモリ

(2)、これらのリソースの配分?

   当社では生産環境、ジョブ投入スパークは、対応するパラメータを調整し使用するシェルスクリプトを、火花提出します

/ usr / local /火花/ binに/火花提出\

--class cn.spark.sparktest.core.WordCountCluster \

構成の数の--num-執行3 \エグゼ

各エグゼキュータの--executorメモリ100メートル\コンフィギュレーションメモリのサイズ

--executor-コア3 \エグゼキュータは、CPUコアの数のそれぞれに対して配置

--driverメモリ\ドライバのコンフィギュレーションメモリ(有意な影響)100メートル

/usr/local/SparkTest-0.0.1-SNAPSHOT-jar-with-dependencies.jar \

(3)、どのくらいに調整、それが最大のでしょうか?

まず、スパークスタンドアロン、スパーククラスタのセットを設定し、会社のクラスタ、あなたは心も各マシンを理解することができるはずです

、どのくらいのメモリは、使用どのくらいのCPUコアについて、次に、実際の状況に応じて、時間を設定し、

各スパークジョブのリソース割り当てを調整します。たとえば、あなたは、メモリの4Gを使用する各マシン、2つのCPUコアを与えることができます。

20の機械、執行、20;平均エグゼキュータ:メモリの4G、2 CPUコア。

ケース:

第二に、糸。リソースキュー。リソーススケジューリング。、見えることになっているリソースキューに提出する、あなたのスパークの仕事を、  

 Hadoopの火花の嵐は、各キューは、独自のリソース(CPU MEMを)持っています

およそどのように多くのリソース?500G、メモリ100、CPUコア、エグゼキュータ、50;平均エグゼキュータ:10Gメモリ、2 CPUコア。

将来的にリソースを調整するのはなぜ(4)、パフォーマンスが改善できますか?

executorを増やします。

   エグゼキュータの数が比較的少ない場合は、タスクの数が並列に実行することができますので、それが私たちのアプリケーションのことを意味し、比較的小さい能力を並列に実行するために弱い上。

   3つのそのようなエグゼキュータがあり、各エグゼキュータは、それが6であるタスクを並列に実行することができ、2つのCPUコアを有します。6後に実行され、6つのタスクのグループを置き換えますエグゼキュータの数を増加した後、それは、タスクの数は、並列に実行することができることを意味し、それはあまり変わっ。図6は、100元のようであり、今並行10で実行されてもよい、あるいは20。前の改善に数回、数倍以上の並列そう。したがって、パフォーマンス(実行速度)だけでなく、時代の数〜数十を向上させることができます。

 

各エグゼキュータのCPUコアを増やします。

   また、並列実行する機能を追加します。もともと20キュータ、唯一の2 CPUコアあたり。タスク番号は、並列に実行することができます

40タスクがあります。今、CPUコアのすべての実行者は、5個に増加しました。数のタスクを並列に実行することができ、100タスクがあります。実行速度は、2倍程度に向上します。

 

メモリ各エグゼキュータの量を増やします。

パフォーマンスを向上させるために、将来的にはメモリの量を増やし、3点があります。

   1、必要性はRDDキャッシュされた場合、その後、より多くのメモリ、より多くのデータをキャッシュすることができ、少ないデータがディスクに書き込まれ

でもディスクに書き込まれません。これは、ディスクIOを減らします

   図2は、シャッフル動作のために、ストアデータと引っ張ら重合にメモリを必要とする、側面を減らします。メモリが十分でない場合、それがディスクに書き込まれます。後のエグゼキュータに多くのメモリを割り当てる場合は、ディスクに書き込まれるデータが少なくニーズがあるディスクに書き込まさえせずに、。ディスクIOは、パフォーマンスを向上させること、軽減します。

   3、タスクの実行のためにそれは多くのオブジェクトを作成することメモリが比較的小さい場合、それはしばしば、JVMのヒープメモリがいっぱいになる可能性があり

その後、頻繁にGC、ガベージコレクション、マイナーGC、フルGC。(非常に遅いです)。少ないGC、ガベージコレクションをもたらし、メモリを増やした後、

避ける速度低下、パフォーマンスの向上

2、パーティションの数とタスクの数との関係

(1)、RDD場合パーティションの数はRDDタスクの総数を決定するように、タスクから各パーティションをします計算。
計算ノード(エグゼキュータ)アプリケーションの数と計算コアあたりのノード数は、同じ時間では、あなたは、タスクを並列に実行することができます決めます。

  • 各ノードは、1人の以上の執行を果たすことができます。
  • コアの数によって各執行は、各コアは、タスクの各執行のために一度に行うことができます。
  • 各タスクの実行結果は、RDDのpartiton目標を生成することです。
  • 同時実行=番号キュータ(SPARK_EXECUTOR_INSTANCES)*各コアの数(SPARK_EXECUTOR_CORES)エグゼキュータを実行するタスク

3、チューニング並列スパークの合理的なセット

 

(1)、意味するところの並列処理スパーク度?

    スパークジョブ、各段階のタスクの数は、また、並列処理の段階の各段階でスパークジョブを表します!

    並列度は、リソースに一致しない場合は、完成に割り当てる最大の資源は、割り当てられ、その後、プログラムに対応する資源の平行度を調整することができたときに結果として資源配分あなたが行くすべて無駄にしました。一方、並行して実行するだけでなく、各タスクの数が少なく、処理することができます(非常に単純な原理を。並列処理の設定、合理的な程度は、クラスタリソースをフルに活用する各タスクの処理データ量を削減し、増加のパフォーマンスがより高速に実行することができます。

    例えば:

        、私たちのようなスパークジョブに割り当てられた十分なリソースを与えることができますスクリプト火花提出し、今では、場合50 executorを 、各エグゼキュータは、メモリの10Gを持って各エグゼキュータは、3つのコアCPUを持っています  。基本的なリソースは、上限糸またはクラスタキューに達しています。

タスクが設定され、またはそれは、100タスクを設定されているような、めったに設定されていません。 50エグゼキュータ、各エグゼキュータが言うことである3個のコア、有する
の任意の時間段階の実行アプリケーションを、150 CPUコアの総数は、並行して実行することができるありますおよそ均等に分散のみ100、タスクはわずか100タスク、同時に実行されているただし、タスクはあなたが今、2つのタスクに割り当てられた各エグゼキュータは、[OK]を、その後、各エグゼキュータは2つのだけ並列タスクを実行します。1つのCPUコアを残りの各エグゼキュータは失われてしまいます!けれどもあなたのリソースには、十分な割り当てが、問題は、あなたがすべて無駄に行くリソース割り当て、その結果、並列度は、リソースと一致しないことです。並列処理の合理的な程度を設定し、あなたのクラスタリソースを完全に合理的な使用に十分な大きさの、十分な大きさを設定する必要があります。  上記の例のように、クラスタは150 CPUコアの合計を持っている、あなたは150の同時タスクを実行することができます。次に、あなたができる150並行して実行されるタスク、および以降の150に増加したタスクのために、クラスタリソースを完全に有効活用すること、少なくとも150に、並列処理のアプリケーションを移動する必要があり、同時に並行して実行しますまた、処理すべき各タスクの量が小さくなることができ、このようなトータルとして 150Gであるデータ処理されるべき  場合、タスク100 1.5Gのデータを計算するために、各タスクのため150タスク、データ1Gを処理する限り、各タスクに増加しました

(2)、どのように並列度を向上させるには?

   1、タスクの数は、少なくとも総CPUコア数の同じスパークアプリケーションに(一緒に実行最も合理、150コア、分配150task、同時期に完成し実行されている)公式勧告、タスクの数、点火アプリケーション合計CPUにセットコア数2〜3倍、例えば150 CPUコアは、基本的なタスクは、300から500までの数を設定することである  Aに、そして合理的な状況が異なる、例えば50代のような少し速く実行するいくつかのタスクが、終了される、いくつかのタスクが少し遅くなることがあり半分しか完成し、実行中なので、あなたの番号タスクあれば、単にCPUコアの数と同じに設定し、そのよう150taskは、10 Geが最初に轢かので、資源の浪費につながる可能性があり、そして残りの140がまだ実行されているが、今回、廃棄物を生じるアイドルCPUコア10外があります。二、三回の場合は、すぐにいっぱいに別のタスクを実行するタスクが完了した後に、CPUコアがアイドル状態であることを確認しようとしないでください。運用効率と速度を向上しようとしているときにスパーク。パフォーマンスを向上させます。

    2、どのようにスパークアプリケーションの並列度を設定するには?

      spark.defalut.parallelismの デフォルト値は、例えば10に設定されている場合、何の値ではないシャッフルで動作するプロセスである(ヴァルRDD2 = rdd1.reduceByKey(_ + _) 、パーティションの// RDD2数は10であるRDD1衝撃パラメータからパーティションの数)

      新しいSparkConf()。セット(「spark.defalut.parallelism」、」「500)

    4、RDD.repartition、RDDパーティションの再設定された数の

    ナンバー5、reduceByKey演算子はのパーティションを指定しました

                 ヴァルRDD2 = rdd1.reduceByKey(_ _ +、10)ヴァルRDD3 = rdd2.map.filter.reduceByKey(_ _ +)

    。6、ヴァルRDD3 = RDD1。参加(RDD2)   親パーティションRDDにおける最大数によって決定された番号RDD3のpartiitonので、使用する場合は、親RDDのパーティションの数を増やす、オペレータに加入。

 

公開された159元の記事 ウォン称賛75 ビュー190 000 +

おすすめ

転載: blog.csdn.net/xuehuagongzi000/article/details/103081319