0

EC2セットアップしていr3.8xlarge (32 cores, 244G RAM)ます。

私のSparkアプリケーションでは、DataBrickからS3使用して 2 つの csv ファイルを読み取っています。各 csv には約 500 万行あります。Spark-CSV私はunionAll2 つの DataFrame であり、結合された DataFrame で実行していdropDuplicatesます。

しかし、私が持っているとき、

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

スパークはより遅い.setMaster("local")

32コアだともっと速くなるんじゃない?

4

1 に答える 1

0

Spark は Windows オペレーティング システムではないため、最初から可能な最大容量で動作するため、使用法に合わせて調整する必要があります。

今、あなたは 32 コアの 1 つのノードで私のものを起動して処理するように率直に言いました。それは、Spark の得意分野ではありません。これは、マルチノード クラスタで実行されると想定される分散システムであり、最適に機能します。

理由は簡単で、32 コアを使用している場合でも、IO の問題はどうでしょうか。30 個のエグゼキュータを実行した場合は、同じディスクから 32 個のプロセスを読み取るよりもみましょう。

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

データが非常に小さく、オーバーヘッドが大きい場合は、32 個のパーティションが必要であることを具体的に指定しました。理想的には、自分が何をしているのか、または反復的なタスクを行っているのかを具体的に把握するまで、パーティションを指定しないでください。また、データが常にまったく同じになることがわかっています。

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

于 2016-11-09T04:51:26.257 に答える