2017-01-06 3 views
0

Я считаю, что слишком много использования памяти, когда в процессе искры произошел случайный переполох.Почему Spark использует и захватывает слишком много памяти при перетасовке?

Следующая цифра - это метрика памяти, когда я использую данные 700 МБ и всего три файла rdd.map. (я использую Ganglia в качестве инструмента мониторинга, и показать только три узлы моего кластера. Ось й означает временные ряды, ось у означает использование памяти)

enter image description here

и рисунок также память метрики, когда Я использую те же данные и использовать три rdd.groupBy, три rdd.flatMap (заказ: groupBy1-> flatMap1-> groupBy2-> flatMap2-> groupBy3-> flatMap3)

enter image description here

Как вы можете видеть, все из памяти трех узлов значительно увеличивается (несколько ГБ), хотя я использую только 700 МБ данных. На самом деле у меня 8 рабочих узлов, и все 8 рабочих памяти значительно увеличены.

Я думаю, что основной причиной является тасовка, поскольку rdd.map не имеет тасования, но rdd.groupBy имеет случайный порядок.

В этой ситуации, я думаю, три точки ниже:

  1. почему там слишком много использования памяти? (более 15 ГБ используется, когда я использую 700 МБ во всем моем рабочем узле.)
  2. Почему кажется, что используемая память для старого shuffle не удаляется до того, как приложение Spark закончено?
  3. Есть ли способ уменьшить использование памяти или удалить память, сгенерированную в старой тасовке?

P.S. - Моя среда:

  1. облако платформы: MS Azure (8 рабочих узлов)
  2. Spec. одного работника: 8 ядер процессора, 16 Гб оперативной памяти
  3. Язык: Java
  4. версия Spark: 1.6.2
  5. Java версия: 1.7 (разработка), 1,8 (исполнение)
  6. Run в искровым автономный (не используйте пряжу или мезос)

ответ

0

В Spark операционная система решит, могут ли данные храниться в кеш-буфере или должна быть пролита на DISK. Каждая задача карты создает столько файлов переполнения, сколько количество редукторов. SPARK не объединяется и не разбивает файлы переполнения в один большой файл, что соответствует Apache Hadoop. Пример: Если есть 6000 (R) редукторов и 2000 (M) задач карты, будет (M * R) 6000 * 2000 = 12 миллионов файлов в случайном порядке. Это связано с тем, что в искровом режиме каждая задача карты создает столько файлов переполнения, сколько количество редукторов. Это привело к ухудшению производительности.

См. Сообщение this, которое очень хорошо объясняет это подробно в продолжении приведенного выше объяснения.

Вы также можете обратиться к документации Optimizing Shuffle Performance in Spark.

~ Kedar

+0

(Writer) @KedarDixit Спасибо за отличную информацию. Искры.shuffle.consolidatefiles, один из свойств Spark, который мне нужен, больше не применяется от Spark 1.6 .. Умм, Есть ли альтернативное свойство? Когда я ищу в Google об этом, но я не могу его найти. – kangbok

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