2016-04-13 12 views
0

私は1つのマスターと3つのスレーブを持っています(それぞれ4つのコア)sparkでパーティションサイズを増やし、パーティション数を減らす利点は何ですか?

デフォルトでは、私のスパーククラスタの最小パーティションサイズは32MBで、ファイルサイズは41GBです。 だから、私は、パーティションのサイズを大きくし、パーティションの数を減らすことの利点は何ですか64Mバイト

にMinSizeプロパティを変更することにより、
sc.hadoopConfiguration.setLong("mapreduce.input.fileinputformat.split.minsize", 64*1024*1024) 
val data =sc.textFile("/home/ubuntu/BigDataSamples/Posts.xml",800) 
data.partitions.size = 657 

をパーティションの数を減らすためにしようとしています。 私のパーティションが約1314のときには2-3分ほどの時間がかかり、パーティション数を減らしても同じ時間がかかります。

答えて

0

パーティションが増えるほどオーバーヘッドは増えますが、いくらか拡張すると、すべてのパーティションを並行して実行できるため、パフォーマンスに役立ちます。

したがって、パーティションの数をコア数と同じにすることは意味があります。他方では、特定のパーティションサイズがJVM内の特定の量のゴミにつながることがあります。これは、オーバーヘッドの上限になります。この場合、パーティションの数を増やして、それぞれのメモリフットプリントを減らしたいとします。

これはワークフローによっても異なる場合があります。 groupByKeyとreduceByKeyを比較してみましょう。後者の場合、ローカルでたくさんの計算を行い、ちょっとしたリモートノードに送ることができます。シャッフルは、リモートに送信される前にディスクに書き込まれるため、より多くのパーティションでパフォーマンスが低下する可能性があります。

各パーティションにはいくつかのオーバーヘッドがあることも事実です。

クラスタを複数の人と共有したい場合は、すべてを処理するためにパーティションの数をいくらか少なくして、すべてのユーザーに処理時間がかかります。

このようなSmth。

関連する問題