Какая разница между spark.sql.shuffle.partitions
и spark.default.parallelism
?
Я попытался установить оба из них в SparkSQL
, но номер задачи второго этапа всегда равен 200.
Какая разница между spark.sql.shuffle.partitions
и spark.default.parallelism
?
Я попытался установить оба из них в SparkSQL
, но номер задачи второго этапа всегда равен 200.
Из ответа здесь, 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
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.