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

Как оптимизировать разлив в случайном порядке в приложении Apache Spark

Я запускаю приложение Spark streaming с двумя рабочими. Приложение имеет операции объединения и объединения.

Все партии успешно завершены, но заметили, что показатели случайного разлива не соответствуют размеру входных данных или размера выходных данных (память разливов более 20 раз).

Пожалуйста, найдите информацию об искровой стадии на изображении ниже: enter image description here

После изучения этого, выяснилось, что

Разброс в случайном порядке происходит, когда недостаточно памяти для данных тасования.

Shuffle spill (memory) - размер десериализованной формы данных в памяти во время разлива

shuffle spill (disk) - размер сериализованной формы данных на диске после разлива

Поскольку десериализованные данные занимают больше места, чем сериализованные данные. Таким образом, разброс в случайном порядке (память) больше.

Отмечено, что этот размер различной памяти невероятно большой с большими входными данными.

Мои запросы:

Значительно ли это влияние оказывает влияние на производительность?

Как оптимизировать это разлитие как памяти, так и диска?

Существуют ли какие-либо свойства искры, которые могут уменьшить/контролировать это огромное разлитие?

4b9b3361

Ответ 1

Обучение настройке производительности Spark требует довольно много исследований и обучения. Есть несколько хороших ресурсов, включая это видео. Spark 1.4 имеет лучшую диагностику и визуализацию в интерфейсе, который может вам помочь.

Итак, вы проливаете, когда размер разделов RDD в конце этапа превышает объем памяти, доступный для буфера в случайном порядке.

Вы можете:

  • Вручную repartition() ваш предыдущий этап, чтобы у вас были меньшие разделы из ввода.
  • Увеличьте буфер перемешивания, увеличив объем памяти в процессах вашего исполнителя (spark.executor.memory)
  • Увеличьте буфер перемешивания, увеличив долю выделенной ему памяти исполнителя (spark.shuffle.memoryFraction) по умолчанию 0,2. Вам нужно вернуть spark.storage.memoryFraction.
  • Увеличьте буфер перетасовки на поток, уменьшив отношение рабочих потоков (SPARK_WORKER_CORES) к памяти исполнителя

Если есть экспертное прослушивание, мне бы хотелось узнать больше о том, как взаимодействуют параметры memoryFraction и их разумный диапазон.