Поделиться через


Оптимизация использования памяти для Apache Spark

В этой статье описывается, как оптимизировать управление памятью кластера Apache Spark для повышения производительности в Azure HDInsight.

Обзор

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

  • В рамках стратегии секционирования рекомендуется выбирать небольшие секции данных и учитывать размер данных, типы и распределение.
  • Рассмотрим более новую, более эффективную Kryo data serialization, а не сериализацию Java по умолчанию.
  • Предпочитайте использовать YARN, так как он разделяет spark-submit по пакетам.
  • Отслеживайте и настраивайте параметры конфигурации Spark.

Для справки структура памяти Spark и некоторые основные параметры памяти исполнителя показаны на рисунке ниже.

Рекомендации по использованию памяти Spark

Если вы используете Apache Hadoop YARN, yarN управляет памятью, используемой всеми контейнерами на каждом узле Spark. На схеме ниже показаны ключевые объекты и их связи.

Управление памятью YARN Spark.

При получении сообщений о нехватке памяти сделайте следующее:

  • Просмотрите изменения в управлении DAG. Уменьшите объем данных через оптимизацию на стороне сопоставления, выполните предварительное разбиение (или сегментацию) исходных данных, оптимизируйте перемешивание для минимизации количества операций и сократите передачу данных.
  • Предпочитайте ReduceByKey с фиксированным ограничением памяти вместо GroupByKey, который предоставляет агрегирование, функции окон и другие функции, но имеет неограниченное ограничение на память.
  • Выберите TreeReduce, который в основном обрабатывает исполнителей или секции, а не Reduce, который в основном обрабатывает драйвер.
  • Используйте DataFrames, а не объекты RDD нижнего уровня.
  • Создайте типы ComplexTypes, инкапсулирующие действия, такие как "Первые N", различные статистические функции или операции управления окнами.

Дополнительные инструкции по устранению неполадок см. в статье Об исключениях OutOfMemoryError для Apache Spark в Azure HDInsight.

Дальнейшие действия