Я считаю, что слишком много использования памяти, когда в процессе искры произошел случайный переполох.Почему Spark использует и захватывает слишком много памяти при перетасовке?
Следующая цифра - это метрика памяти, когда я использую данные 700 МБ и всего три файла rdd.map. (я использую Ganglia в качестве инструмента мониторинга, и показать только три узлы моего кластера. Ось й означает временные ряды, ось у означает использование памяти)
и рисунок также память метрики, когда Я использую те же данные и использовать три rdd.groupBy, три rdd.flatMap (заказ: groupBy1-> flatMap1-> groupBy2-> flatMap2-> groupBy3-> flatMap3)
Как вы можете видеть, все из памяти трех узлов значительно увеличивается (несколько ГБ), хотя я использую только 700 МБ данных. На самом деле у меня 8 рабочих узлов, и все 8 рабочих памяти значительно увеличены.
Я думаю, что основной причиной является тасовка, поскольку rdd.map не имеет тасования, но rdd.groupBy имеет случайный порядок.
В этой ситуации, я думаю, три точки ниже:
- почему там слишком много использования памяти? (более 15 ГБ используется, когда я использую 700 МБ во всем моем рабочем узле.)
- Почему кажется, что используемая память для старого shuffle не удаляется до того, как приложение Spark закончено?
- Есть ли способ уменьшить использование памяти или удалить память, сгенерированную в старой тасовке?
P.S. - Моя среда:
- облако платформы: MS Azure (8 рабочих узлов)
- Spec. одного работника: 8 ядер процессора, 16 Гб оперативной памяти
- Язык: Java
- версия Spark: 1.6.2
- Java версия: 1.7 (разработка), 1,8 (исполнение)
- Run в искровым автономный (не используйте пряжу или мезос)
(Writer) @KedarDixit Спасибо за отличную информацию. Искры.shuffle.consolidatefiles, один из свойств Spark, который мне нужен, больше не применяется от Spark 1.6 .. Умм, Есть ли альтернативное свойство? Когда я ищу в Google об этом, но я не могу его найти. – kangbok