В чем разница между параметрами spark.sql.shuffle.partitions и spark.default.parallelism?

Какая разница между spark.sql.shuffle.partitions и spark.default.parallelism?

Я попытался установить оба из них в SparkSQL, но номер задачи второго этапа всегда равен 200.

Ответ 1

Из ответа здесь, spark.sql.shuffle.partitions настраивает количество разделов, которые используются при перетасовке данных для объединений или агрегаций.

spark.default.parallelism - это количество разделов по умолчанию в RDD по умолчанию, возвращаемое преобразованиями, такими как join, reduceByKey и parallelize, если пользователь не задал явно. Обратите внимание, что spark.default.parallelism работает только для raw 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

Ответ 2

spark.default.parallelism - это номер раздела по умолчанию, установленный в spark, который по умолчанию равен 200. и если вы хотите увеличить количество разделов, вы можете применить свойство spark.sql.shuffle.partitions, чтобы задать номер раздела в конфигурации spark или во время запуска spark SQL.

Обычно этот spark.sql.shuffle.partitions он используется, когда у нас есть переполнение памяти, и мы видим ниже ошибку: ошибка искры: java.lang.IllegalArgumentException: размер превышает Integer.MAX_VALUE

поэтому установите для вашего раздела можно выделить 256 МБ на раздел, который вы можете использовать для своих процессов.

Кроме того, если число разделов близко к 2000, увеличьте его до более чем 2000. В качестве spark применяется другая логика для раздела & lt; 2000 и> 2000, что увеличит производительность вашего кода за счет уменьшения объема памяти, поскольку данные по умолчанию сильно сжаты, если> 2000.