Отладка приложений Apache Spark в кластере HDInsight с помощью Azure Toolkit for IntelliJ через SSH

В этой статье описано, как использовать инструменты HDInsight из Azure Toolkit for IntelliJ для удаленной отладки приложений в кластере HDInsight.

Необходимые компоненты

Создание приложения Spark Scala

  1. Запустите IntelliJ IDEA и выберите Create New Project (Создать проект), чтобы открыть окно New Project (Новый проект).

  2. На панели слева выберите Azure Spark/HDInsight.

  3. В главном окне выберите Spark Project with Samples (Scala) (Проект Spark с примерами (Scala)).

  4. Из раскрывающегося списка Build tool (Инструмент сборки) выберите один из следующих вариантов:

    • Maven для поддержки мастера создания проекта Scala.
    • SBT для управления зависимостями и создания проекта Scala.

    Intellij Create New Project Spark.

  5. Выберите Далее.

  6. В окне New Project (Новый проект) укажите следующую информацию:

    Свойство Description
    Имя проекта Введите имя. В этом пошаговом руководстве используется myApp.
    Расположение проекта Введите необходимое расположение для сохранения проекта.
    Project SDK (Пакет SDK проекта) Если поле является пустым, выберите New... (Создать...) и перейдите к JDK.
    Версия Spark Мастер создания интегрирует правильную версию пакетов SDK для Spark и Scala. Если используется версия кластера Spark более ранняя, чем 2.0, выберите Spark 1.x. В противном случае выберите Spark 2.x. В этом примере используется Spark 2.3.0 (Scala 2.11.8).

    Intellij New Project select Spark version.

  7. Выберите Готово. Может пройти несколько минут, прежде чем проект станет доступным. Ход выполнения отображается в нижнем правом углу.

  8. Разверните проект и перейдите в раздел src >main >scala >sample. Дважды щелкните SparkCore_WasbIOTest.

Выполнение локального запуска

  1. В скрипте SparkCore_WasbIOTest щелкните правой кнопкой мыши редактор скриптов и выберите параметр Run 'SparkCore_WasbIOTest', чтобы выполнить локальный запуск.

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

    Intellij Project local run result.

  3. С помощью наших средств при локальном запуске и локальной отладке по умолчанию настраивается конфигурацию локального запуска. Откройте конфигурацию [Spark в HDInsight] XXX в верхнем правом углу: вы увидите, что конфигурация [Spark в HDInsight] XXX уже создана в разделе Apache Spark в HDInsight. Откройте вкладку Locally Run (Локальный запуск).

    Intellij Run debug configurations local run.

    • Переменные среды. Если вы уже задали переменную среды HADOOP_HOME для C:\WinUtils, она определяется автоматически и добавлять ее вручную не нужно.
    • Расположение WinUtils.exe. Если вы не задали переменную среды, найдите расположение, нажав соответствующую кнопку.
    • Просто выберите один из вариантов (в MacOS и Linux в этом нет необходимости).
  4. Кроме того, вы можете вручную задать конфигурацию перед локальным запуском и локальной отладкой. На предыдущем снимке экрана щелкните знак плюса (+). Затем выберите вариант Apache Spark on HDInsight (Apache Spark в HDInsight). Укажите имя и имя класса Main, чтобы сохранить их, а затем нажмите кнопку локального запуска.

Локальная отладка

  1. Откройте скрипт SparkCore_wasbloTest и задайте точки останова.

  2. Щелкните редактор скриптов правой кнопкой мыши. Выберите вариант Debug '[Spark on HDInsight]XXX', чтобы выполнить локальную отладку.

Удаленный запуск

  1. Перейдите в меню Запуск >Редактировать конфигурации. В этом меню можно создавать и редактировать конфигурации для удаленной отладки.

  2. В диалоговом окне Run/Debug Configurations (Конфигурации выполнения и отладки) щелкните знак "плюс" (+). Затем выберите вариант Apache Spark on HDInsight (Apache Spark в HDInsight).

    Intellij Add new configuration.

  3. Перейдите на вкладку Удаленный запуск в кластере. Введите следующие данные: Имя, Кластер Sparkи Имя класса Main. Затем щелкните Расширенная конфигурация (удаленная отладка). Наши средства поддерживают отладку с исполнителями. Для параметра numExectors по умолчанию устанавливается значение 5. Лучше не указывать значение больше 3.

    Intellij Run debug configurations.

  4. В части Расширенная конфигурация (удаленная отладка) выберите Включить удаленную отладку Spark. Введите имя пользователя SSH, затем введите пароль либо воспользуйтесь файлом закрытого ключа. Для выполнения удаленной отладки необходимо настроить ее. Чтобы использовать удаленный запуск, не нужно настраивать отладку.

    Intellij Advanced Configuration enable spark remote debug.

  5. Теперь конфигурация сохранена под именем, которое вы указали. Чтобы просмотреть сведения о конфигурации, выберите имя конфигурации. Чтобы внести изменения, выберите Edit Configurations (Изменить конфигурации).

  6. Завершив настройку конфигурации, можно запустить проект на удаленном кластере или выполнить удаленную отладку.

    Intellij Debug Remote Spark Job Remote run button.

  7. Нажмите кнопку Отключить, чтобы журналы отправки не отображались на левой панели. Тем не менее она все еще выполняется в серверной части.

    Intellij Debug Remote Spark Job Remote run result.

Удаленная отладка

  1. Настройте точки останова, а затем щелкните значок Remote debug (Удаленная отладка). Отличие удаленной отладки заключается в том, что требуется настроить имя пользователя и пароль SSH.

    Intellij Debug Remote Spark Job debug icon.

  2. Когда выполнение программы достигнет точки останова, в области Debugger (Отладчик) вы увидите вкладку Driver (Драйвер) и две вкладки Executor (Исполнитель). Щелкните значок Resume Program (Возобновить выполнение программы), чтобы продолжить выполнение кода, который затем достигнет следующей точки останова. Откройте соответствующую вкладку Исполнитель, чтобы найти целевой исполнитель для отладки. Вы можете просмотреть журналы выполнения на соответствующей вкладке Консоль.

    Intellij Debug Remote Spark Job Debugging tab.

Удаленная отладка и исправление ошибок

  1. Настройте две точки останова и щелкните значок Debug (Отладка), чтобы приступить к удаленной отладке.

  2. Выполнение кода будет приостановлено в первой точке останова, а в области Variables (Переменные) отобразятся сведения о параметре и переменной.

  3. Щелкните значок Resume Program (Возобновить выполнение программы), чтобы продолжить. Выполнение кода будет приостановлено во второй точке останова. Как и ожидалось, возникнет исключение.

    Intellij Debug Remote Spark Job throw error.

  4. Снова щелкните значок Resume Program (Возобновить выполнение программы). В окне HDInsight Spark Submission (Отправка HDInsight Spark) будет указано, что во время выполнения задания произошла ошибка.

    Intellij Debug Remote Spark Job Error submission.

  5. Чтобы динамически обновить значение переменной с помощью функции отладки IntelliJ, еще раз щелкните значок Debug (Отладка). Снова появится область Variables (Переменные).

  6. Щелкните правой кнопкой мыши целевой объект на вкладке Debug (Отладка), а затем выберите Set Value (Задать значение). Затем введите новое значение переменной. Нажмите клавишу ВВОД, чтобы сохранить значение.

    Intellij Debug Remote Spark Job set value.

  7. Щелкните значок Resume Program (Возобновить выполнение программы), чтобы продолжить выполнение программы. На этот раз исключение не возникает. Проект выполняется успешно без исключений.

    Intellij Debug Remote Spark Job without exception.

Следующие шаги

Сценарии

Создание и запуск приложений

Инструменты и расширения

Управление ресурсами