Оптимизация производительности Zeppelin

В этой статье описаны методы оптимизации работы сервиса Zeppelin, а также выделены основные факторы, влияющие на производительность Zeppelin.

Память

Основным фактором, влияющим на производительность сервиса Zeppelin, является объем оперативной памяти, доступной компоненту Zeppelin Server. Работу сервиса можно ускорить, выделив больше оперативной памяти JVM-процессу Zeppelin. Чтобы увеличить параметры -Xms/-Xmx, используйте настройки Zeppelin Server Heap Memory в ADCM (Clusters → <clusterName> → Services → Zeppelin → Primary configuration) и перезапустите сервис.

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

  • Количество пользователей, которые будут одновременно подключаться к серверу Zeppelin.

  • Режимы биндинга, в которых работают отдельные интерпретаторы.

Режимы биндинга

Интерпретаторы Zeppelin запускаются в виде отдельных JVM-процессов, которые выполняют код заметок и возвращают результаты, общаясь с демоном Zeppelin. Zeppelin поддерживает несколько режимов биндинга интерпретаторов (interpreter binding modes), которые определяют способы запуска процессов для каждого интерпретатора. Используя различные комбинации режимов биндинга, можно оптимизировать потребляемую память и выбрать подход, который лучше всего подходит для конкретного кластера. Краткое описание этих режимов представлено ниже.

  • Shared.

    В этом режиме все заметки интерпретатора выполняются в одном JVM-процессе с общей сессией. Такой подход обеспечивает меньшее потребление памяти в многопользовательской среде, а также предоставляет возможности взаимодействия между заметками, например, доступ к переменным, созданным в других заметках. Последнее может быть особенно полезно при совместном использовании "тяжелых" объектов, таких как SparkContext, SparkSession и так далее.

    Чтобы увеличить объем оперативной памяти, выделяемой сервером Zeppelin каждому процессу интерпретатора, используйте параметр ZEPPELIN_INTP_MEM в настройках Custom zeppelin-env.sh в ADCM (Clusters → <clusterName> → Services → Zeppelin → Primary configuration и активируйте Show advanced). Например:

    ZEPPELIN_INTP_MEM="-Xms2048m -Xmx4096m -XX:MaxMetaspaceSize=1024m"
  • Scoped.

    В этом режиме для каждого типа интерпретатора Zeppelin создает одну JVM, а каждая заметка выполняется в своей выделенной сессии в зависимости от того, выбрана опция Per Note или Per User.

  • Isolated.

    В этом режиме для каждой заметки создается отдельный JVM-процесс интерпретатора (в конфигурации Per note). Общее потребление памяти увеличивается, однако в таком режиме пользователи Zeppelin могут выполнять заметки в полностью изолированной среде, исключая возможность конфликтов, в том числе имен переменных. Кроме того, перезапуск интерпретатора одним пользователем не влияет на работу других.

    Для многопользовательской среды этот режим является наиболее затратным с точки зрения оперативной памяти, поэтому необходимо убедиться, что хосты ADH c компонентом Zeppelin Server могут поддерживать работу множества JVM для каждой заметки.

Оптимизации Spark

При работе с интерпретаторами Spark для ускорения Spark-задач следует использовать методы оптимизации, описанные в статье Оптимизация производительности в Spark. Для установки конфигурационных свойств Spark используйте поле Custom zeppelin-env.sh в ADCM (Clusters → <clusterName> → Services → Zeppelin → Primary configuration и активируйте Show advanced). Например:

export SPARK_SUBMIT_OPTIONS="--executor-memory 4G"
ПРИМЕЧАНИЕ
Первый запуск заметки Spark всегда медленнее, поскольку интерпретатору Spark необходимо создать объекты контекста и Application Master.

Логирование

Использование уровня логирования DEBUG в Zeppelin может замедлить отклик в UI, особенно в момент сохранения конфигурации интерпретатора при создании новой заметки. Уровень DEBUG следует использовать только для устранения неполадок.

Для изменения уровня логирования в Zeppelin используйте настройки Custom log4j.properties в ADCM (Clusters → <clusterName> → Services → Zeppelin → Primary configuration и активируйте Show advanced).

Браузер

Используйте современный веб-браузер, способный загружать большие заметки (10 МБ и более), визуализировать десятки и сотни мегабайт выходных данных, поддерживать современные библиотеки визуализации и так далее. Например, в старых версиях IE сообщалось о проблемах с аутентификацией.

Удаление объемного вывода параграфа снижает нагрузку на браузер/JVM, так как результаты последнего выполнения заметки сохраняются во внутренних файлах Zeppelin.

Прочее

  • Периодически перезапускайте интерпретаторы. Длительное функционирование интерпретатора без перезапуска может приводить к замедлению работы.

  • Ограничьте количество строк, возвращаемых SQL-запросами. Например, для интерпретаторов Spark количество строк в результатах можно регулировать с помощью свойства конфигурации интерпретатора zeppelin.spark.maxResult.

  • Используйте префикс %table для более эффективной визуализации больших наборов результатов.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней