web-dev-qa-db-ja.com

spark.sql.shuffle.partitionsとspark.default.parallelismの違いは何ですか?

spark.sql.shuffle.partitionsspark.default.parallelismの違いは何ですか?

両方をSparkSQLに設定しようとしましたが、2番目のステージのタスク番号は常に200です。

49
Edison

答えから herespark.sql.shuffle.partitionsは、結合または集約のためにデータをシャッフルするときに使用されるパーティションの数を構成します。

spark.default.parallelismは、RDDjoin、およびreduceByKeyなどの変換によって返されるparallelizesのパーティションのデフォルト数であり、ユーザーが明示的に設定していない場合。 spark.default.parallelismは未加工のRDDでのみ機能しているようで、データフレームを使用する場合は無視されることに注意してください。

実行しているタスクが結合または集約ではなく、データフレームで作業している場合、これらを設定しても効果はありません。ただし、コードでdf.repartition(numOfPartitions)(新しいvalに割り当てることを忘れないでください)を呼び出すことで、自分でパーティションの数を設定できます。


コードの設定を変更するには、次のようにします。

sqlContext.setConf("spark.sql.shuffle.partitions", "300")
sqlContext.setConf("spark.default.parallelism", "300")

または、spark-submitを使用してクラスターにジョブを送信するときに変更を加えることができます。

./bin/spark-submit --conf spark.sql.shuffle.partitions=300 --conf spark.default.parallelism=300
59
Shaido

spark.default.parallelismは、sparkで設定されるパーティションのデフォルト数であり、デフォルトでは200です。また、パーティションの数を増やしたい場合は、プロパティを適用できます- spark.sql.shuffle.partitions spark構成またはspark SQLの実行中にパーティションの数を設定します。

通常、これはspark.sql.shuffle.partitionsメモリの混雑があり、以下のエラーが表示される場合に使用されます:spark error:Java.lang.IllegalArgumentException:Size exceeded Integer .MAX_VALUE

したがって、パーティションごとに256 MBとしてパーティションを割り当てることができ、プロセスに設定するために使用できるように設定します。

また、パーティションの数が2000に近い場合は、2000以上に増やします。sparkは、パーティション<2000および> 2000に異なるロジックを適用します。 2000を超える場合は高度に圧縮されます。

0
Amit khandelwal