0

私はEC2r3.8xlarge (32 cores, 244G RAM)を設定しました。私Sparkアプリケーションでスパーク:マスターローカル[*]がマスターローカルよりもかなり遅い

、私は各CSV約5万行を持って、DataBrickからSpark-CSVを使用してS3から2つのCSVファイルを読んでいます。私はunionAllの2つのDataFramesであり、組み合わせたDataFrameでdropDuplicatesを実行しています。私が持っているとき

はしかし、

val conf = new SparkConf() 
      .setMaster("local[32]") 
      .setAppName("Raw Ingestion On Apache Spark") 
      .set("spark.sql.shuffle.partitions", "32") 

スパークは.setMaster("local")

よりも遅くなり、それはより速く32個のコアと思いませんか?

答えて

0

よくsparkはWindowsオペレーティングシステムではなく、最初から最大限の容量で動作するため、使用するために調整する必要があります。

今はちょうど私が32コアで1つのノードで私のものを始動させ、処理すると言っています。それはスパークが良いものではありません。分散システムは、マルチノードクラスタ上で動作すると想定されます。つまり、最適な場所で動作します。

理由は単純ですが、32コアを使用していても、IOの問題はどうですか? これは、30のエグゼキュータを実行している場合はletを使用しているため、同じディスクから32個のプロセスを読み込んでいるためです。

あなたは32コアを指定しましたが、エグゼキュータのメモリはどうですか? 両方のマシンに同じラムがあって、テストしていました。

データが非常に小さくてオーバーヘッドが多い場合は、32個のパーティションが必要になることを具体的に指定しました。理想的には、自分が何をやっているかを知ったり、反復的な作業をしたりするまでは、パーティションを指定しないでください。データはいつもまったく同じようになるでしょう。

これを正しく調整すると、32コアのスパークは実際には基本的に1つのコアで実行されている「ローカル」よりも速く動作します。

関連する問題