Статьи

Sparklens: инструмент для оптимизации приложений Spark

Sparklens — это инструмент профилирования для Spark со встроенным симулятором Spark Scheduler: он упрощает понимание ограничений масштабируемости приложений Spark. Это помогает понять, насколько эффективно данное приложение Spark использует предоставленные ему вычислительные ресурсы. Он был реализован и поддерживается в Qubole . Это с открытым исходным кодом ( Apache License 2.0 ) и был реализован в Scala.

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

Существует четыре способа использования Sparklens:

  • Живой режим
  • Автономный режим
  • Запустить файл истории событий
  • Ноутбуки

В этом посте я сосредотачиваюсь только на живом и автономном режимах.

Живой режим

Sparklens может работать во время выполнения приложения, используя следующие параметры (для
подать искру и
спарк-снаряд ):

1
2
--packages qubole:sparklens:0.2.1-s_2.11
--conf spark.extraListeners=com.qubole.sparklens.QuboleJobListener

или программно, добавив зависимость Sparklens в проект Java / Scala (вот пример для Maven):

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<repositories>
   <!-- Mandatory: the Sparklens artifact aren't in Maven Central -->
   <repository>
    <id>qubole-maven-repo</id>
    <name>Qubole Maven Repo</name>
   </repository>
    
   <repository>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <layout>default</layout>
      <url>http://repo1.maven.org/maven2</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
</repositories>
...
<dependency>
  <groupId>qubole</groupId>
  <artifactId>sparklens</artifactId>
  <version>0.2.1-s_2.11</version>
</dependency>

а затем путем настройки его слушателя следующим образом (для Spark 1.X)

1
2
3
4
5
SparkConf conf = new SparkConf();
conf.setMaster(master);
conf.setAppName("Spark app name");
conf.set("spark.extraListeners", "com.qubole.sparklens.QuboleJobListener");
JavaSparkContext jsc = new JavaSparkContext(conf);

или следующим образом (для Spark 2.x)

1
2
3
4
5
6
SparkSession spark = SparkSession
  .builder()
  .appName("Spark app name")
  .master(master)
  .config("spark.extraListeners", "com.qubole.sparklens.QuboleJobListener")
  .getOrCreate();

Автономный режим

Sparklens может быть запущен позже и не обязательно во время выполнения. Это можно установить, добавив следующее свойство в конфигурацию приложения Spark:

1
conf.set("spark.sparklens.reporting.disabled", "true");

В конце выполнения приложения Spark создается только файл данных JSON. Каталог сохранения по умолчанию — / tmp / sparklens , но можно изменить место назначения с помощью следующего свойства конфигурации:

1
conf.set("spark.sparklens.data.dir", "/home/guglielmo/sparklens");

Этот файл затем может быть использован для запуска Sparklens независимо через
Команда spark-submit выглядит следующим образом:

1
2
$SPARK_HOME/bin/spark-submit --packages qubole:sparklens:0.2.1-s_2.11 \
  --class com.qubole.sparklens.app.ReporterApp qubole-dummy-arg <datafile_path>

Приведенная выше команда, начиная с файла данных JSON, создает отчет, имеющий такую ​​же структуру и содержащий те же результаты, что и для отчета, созданного в режиме реального времени.

Отчет

Это информация, доступная в окончательном отчете:

  • Статистика эффективности (время водителя и исполнителя, критическое и идеальное время приложения, потери в основных вычислительных часах водителем и исполнителем).
  • Прогнозируемое время настенных часов и использование кластера с различным количеством исполнителей.
  • За этап метрики.
  • Исполнители доступны и исполнители требуются с течением времени.
  • Агрегатные метрики на основе задач.

Вывод

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

Сгенерированные отчеты представлены в текстовом формате, который содержит все показатели и информацию, упомянутые выше. Qubole обеспечивает
онлайн-сервис, который генерирует удобный и элегантный отчет с интерактивными диаграммами и таблицами, начиная с загруженного файла данных JSON. Если вашей организации не разрешено делиться данными JSON, сгенерированными с помощью приложения Sparklens на Spark, выполняющегося в вашей корпоративной инфраструктуре, вам следует придерживаться текстовых отчетов. Для решения подобных ситуаций я думаю о реализации и выпуске библиотеки Java с открытым исходным кодом для создания удобных для пользователя отчетов в предварительной среде, начиная с файлов данных Sparklens JSON или текстовых отчетов. Пожалуйста, зарегистрируйте свой интерес к этой библиотеке, комментируя этот пост. Спасибо.

Смотреть оригинальную статью здесь: Sparklens: инструмент для оптимизации приложений Spark

Мнения, высказанные участниками Java Code Geeks, являются их собственными.