Подтвердить что ты не робот

Количество разделов в RDD и производительность в Spark

В Pyspark я могу создать RDD из списка и решить, сколько разделов иметь:

sc = SparkContext()
sc.parallelize(xrange(0, 10), 4)

Как количество разделов, которые я решаю для разделения моего RDD, влияет на производительность? И как это зависит от количества ядра моей машины?

4b9b3361

Ответ 1

Основной эффект будет заключаться в том, чтобы указать слишком мало разделов или far слишком много разделов.

Слишком мало разделов. Вы не будете использовать все ядра, доступные в кластере.

Слишком много разделов При управлении многими небольшими задачами будут чрезмерные накладные расходы.

Между двумя первыми намного больше влияет на производительность. Планирование слишком большого количества мелких задач является относительно небольшим воздействием на данный момент для подсчетов разделов ниже 1000. Если вы имеете порядка десятков тысяч разделов, то искру получает очень медленно.

Ответ 2

Чтобы добавить к javadba отличный ответ, я напоминаю, что документы рекомендуют, чтобы ваше количество разделов устанавливало в 3 или 4 раза количество ядер процессора в вашем кластере, чтобы работа распределялась более равномерно между доступными ядрами ЦП. То есть, если у вас есть только 1 раздел на ядро ​​процессора в кластере, вам придется подождать, пока будет завершена одна самая длинная работающая задача, но если бы вы сломали ее, то рабочая нагрузка была бы более уравновешенной с быстрыми и медленными запущенными задачами.

Ответ 3

Количество разделов имеют большое влияние на производительность кода. В идеале спарк-раздел подразумевает, сколько данных вы хотите перетасовать. Обычно вы должны установить этот параметр на свой размер в случайном порядке (случайное чтение и запись), а затем вы можете решить и количество разделов от 128 до 256 МБ на раздел, чтобы получить максимальную производительность.

Вы можете установить разделение в вашем коде spark sql, установив свойство как: spark.sql.shuffle.partitions или при использовании любого фрейма данных вы можете установить это следующим образом: df.repartition(numOfPartitions)