2016-03-04 7 views
18

В Pyspark, я могу создать RDD из списка и решить, сколько разделов иметь:Количество разделов в РДУ и производительности в Спарк

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

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

+1

Я настоятельно рекомендую это [ссылка] (http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/). Перейти к разделу «Параллельность настройки». Это становится довольно сложно, но это, безусловно, в глубине. –

ответ

24

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

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

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

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

+1

Действительно. У меня есть конкретная работа, которая использовалась для исчерпания памяти, когда у нее было 2 миллиона больших json-объектов, разделенных на 25-килограммовые разделы. Когда я объединяюсь до 320, работа выполняется менее чем за минуту. Это похоже на один из самых простых способов повысить производительность. –

+0

Недостатки слишком большого количества разделов: больше выборок, больше обращений к диску. Драйверу необходимо отслеживать состояние для каждой задачи. Источник: слайд 53, https://www.slideshare.net/Hadoop_Summit/why-your-spark-job-is-failing – ruhong

19

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

+1

Можете ли вы предоставить ссылку на то, где рекомендуемое количество разделов описано в документах, пожалуйста? – sversch

+0

@sversch Этот [hakernoon blog post] (https://hackernoon.com/managing-spark-partitions-with-coalesce-and-repartition-4050c57ad5c4) может помочь вам в решении оптимального количества разделов. –

+0

@sversch, https://spark.apache.org/docs/latest/tuning.html –

Смежные вопросы