Использование Azure Toolkit for IntelliJ для создания приложений Apache Spark для кластера HDInsight

В этой статье показано, как разрабатывать приложения Apache Spark в Azure HDInsight с помощью подключаемого модуля Azure Toolkit для интегрированной среды разработки IntelliJ. Azure HDInsight — это управляемая облачная служба аналитики с открытым кодом. Служба позволяет использовать платформы с открытым кодом, такие как Hadoop, Apache Spark, Apache Hive и Apache Kafka.

С помощью подключаемого модуля Azure Toolkit можно выполнять следующие задачи:

  • разрабатывать и отправлять приложения Scala Spark в кластер HDInsight Spark;
  • получать доступ к ресурсам кластера Azure HDInsight Spark;
  • разрабатывать и запускать приложения Scala Spark в локальной среде.

Вы узнаете, как выполнять следующие задачи:

  • Использование подключаемого модуля Azure Toolkit for IntelliJ
  • Разработка приложений Apache Spark
  • отправлять приложения в кластер Azure HDInsight;

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

Установка подключаемого модуля Scala для IntelliJ IDEA

Чтобы установить подключаемый модуль Scala, сделайте следующее.

  1. Откройте IntelliJ IDEA.

  2. На экране приветствия выберите Configure (Настройка)>Plugins (Подключаемые модули), чтобы открыть окно подключаемых модулей.

    IntelliJ IDEA enables scala plugin.

  3. Выберите Install (Установить) в области подключаемого модуля Scala в новом окне.

    IntelliJ IDEA installs scala plugin.

  4. После успешной установки подключаемого модуля необходимо перезапустить интегрированную среду разработки.

Создание приложения Spark Scala для кластера HDInsight Spark

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

  2. На левой панели щелкните Azure Spark/HDInsight.

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

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

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

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

      IntelliJ IDEA New Project dialog box.

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

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

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

    Selecting the Apache Spark SDK.

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

  8. Проект Spark автоматически создает артефакт. Чтобы просмотреть артефакт, выполните указанные ниже действия.

    a. В строке меню выберите File (Файл)>Project Structure... (Структура проекта…).

    b. В окне структуры проекта щелкните Artifacts (Артефакты).

    c. После просмотра артефакта щелкните Cancel (Отменить).

    Artifact info in the dialog box.

  9. Добавьте исходный код приложения, сделав следующее.

    a. В иерархии проекта перейдите к myApp>src>main>scala.

    b. Щелкните правой кнопкой мыши папку scala, а затем выберите New (Новый)>Scala Class (Класс Scala).

    Commands for creating a Scala class from Project.

    c. В диалоговом окне Create New Scala Class (Создание класса Scala) введите имя, в раскрывающемся списке Kind (Вид) выберите Object (Объект) и нажмите кнопку ОК.

    Create New Scala Class dialog box.

    d. После этого файл MyApp.scala откроется в главном представлении. Замените код по умолчанию на приведенный ниже:

    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    
    object myApp{
        def main (arg: Array[String]): Unit = {
        val conf = new SparkConf().setAppName("myApp")
        val sc = new SparkContext(conf)
    
        val rdd = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
        //find the rows that have only one digit in the seventh column in the CSV file
        val rdd1 =  rdd.filter(s => s.split(",")(6).length() == 1)
    
        rdd1.saveAsTextFile("wasbs:///HVACOut")
        }
    
    }
    

    Этот код считывает данные из файла HVAC.csv (доступного для всех кластеров HDInsight Spark), извлекает строки, содержащие только одну цифру в седьмом столбце CSV-файла, и записывает результат в /HVACOut в используемом по умолчанию контейнере хранилища для кластера.

Подключение к кластеру HDInsight

Пользователь может войти в свою подписку Azure или связать кластер HDInsight. Для подключения к кластеру HDInsight используйте имя пользователя/пароль или учетные данные, присоединенные к домену.

Войдите в подписку Azure.

  1. В строке меню выберите Представление>Окно инструментов>Azure Explorer.

    IntelliJ IDEA shows azure explorer.

  2. В Azure Explorer щелкните правой кнопкой мыши узел Azure, а затем выберите Войти.

    IntelliJ IDEA explorer right-click azure.

  3. В диалоговом окне Вход в Azure выберите Имя пользователя устройства, а затем — Войти.

    `IntelliJ IDEA azure sign-in device login`.

  4. В диалоговом окне Azure Device Login (Вход в систему устройства Azure) щелкните Copy&Open (Копировать и открыть).

    `IntelliJ IDEA azure device login`.

  5. В интерфейсе браузера вставьте код и нажмите кнопку Далее.

    `Microsoft enter code dialog for HDI`.

  6. Введите учетные данные Azure и закройте браузер.

    `Microsoft enter e-mail dialog for HDI`.

  7. После входа в диалоговом окне Select Subscriptions (Выбор подписок) будут перечислены все подписки Azure, связанные с указанными учетными данными. Выберите свою подписку, а затем нажмите кнопку Выбрать.

    The Select Subscriptions dialog box.

  8. В Azure Explorer разверните HDInsight, чтобы просмотреть кластеры HDInsight Spark в своей подписке.

    IntelliJ IDEA Azure Explorer main view.

  9. Далее можно развернуть узел имени кластера, чтобы увидеть ресурсы (например, учетные записи хранения), связанные с ним.

    Azure Explorer storage accounts.

Можно связать кластер HDInsight с помощью управляемого имени пользователя Apache Ambari. Аналогичным образом, присоединенный к домену кластер HDInsight можно связать с помощью домена и имени пользователя, например user1@contoso.com. Также вы можете связать кластер службы Livy.

  1. В строке меню выберите Представление>Окно инструментов>Azure Explorer.

  2. В Azure Explorer щелкните правой кнопкой мыши узел HDInsight, а затем — Link A Cluster (Связать кластер).

    Azure Explorer link cluster context menu.

  3. Доступные параметры в окне Link A Cluster (Связывание кластера) зависят от значения, которое вы выбрали из раскрывающегося списка Link Resource Type (Связать тип ресурса). Введите свои значения, а затем нажмите кнопку ОК.

    • Кластер HDInsight

      Свойство Значение
      Link Resource Type (Связать тип ресурса) Из раскрывающегося списка выберите HDInsight Cluster (Кластер HDInsight).
      Cluster Name/URL (Имя или URL-адрес кластера) Введите имя кластера.
      Тип проверки подлинности Оставьте значение Basic Authentication (Обычная аутентификация)
      Имя пользователя Введите имя пользователя кластера. Значение по умолчанию — admin.
      Пароль Введите пароль для этого имени пользователя.

      IntelliJ IDEA link a cluster dialog.

    • Livy Service (Служба Livy)

      Свойство Значение
      Link Resource Type (Связать тип ресурса) Из раскрывающегося списка выберите Livy Service (Служба Livy).
      Livy Endpoint (Конечная точка Livy) Введите конечную точку Livy
      Имя кластера Введите имя кластера.
      Yarn Endpoint (Конечная точка Yarn) Необязательно.
      Тип проверки подлинности Оставьте значение Basic Authentication (Обычная аутентификация)
      Имя пользователя Введите имя пользователя кластера. Значение по умолчанию — admin.
      Пароль Введите пароль для этого имени пользователя.

      IntelliJ IDEA link Livy cluster dialog.

  4. В узле HDInsight отобразится связанный кластер.

    Azure Explorer linked cluster1.

  5. В обозревателе Azure также можно удалить связь кластера.

    Azure Explorer unlinked cluster.

Запуск приложения Spark Scala в кластере HDInsight Spark

После создания приложение Scala можно отправить в кластер.

  1. В проекте перейдите в myApp>src>main>scala>myApp. Щелкните правой кнопкой мыши папку myApp и выберите Submit Spark Application (Запустить приложение Spark). Этот параметр скорее всего будет расположен в нижней части списка.

    The Submit Spark Application to HDInsight command.

  2. В диалоговом окне Запустить приложение Spark выберите 1. Spark в HDInsight.

  3. В окне Edit configuration (Изменить конфигурацию) укажите следующие значения, а затем щелкните ОК.

    Свойство Значение
    Кластеры Spark (только Linux) Выберите кластер HDInsight Spark, в котором вы хотите запустить приложение.
    Select an Artifact to submit (Выбор артефакта для запуска) Оставьте параметр по умолчанию.
    Имя главного класса значение по умолчанию — имя главного класса из выбранного файла. Класс можно изменить, нажав значок-многоточие (...) и выбрав другой класс.
    Job configurations (Конфигурация заданий) Вы можете изменять ключи и значения по умолчанию. Дополнительные сведения см. в статье Apache Livy REST API.
    Аргументы командной строки При необходимости можно ввести аргументы для основного класса, разделив их пробелом.
    Referenced Jars (Ссылки на JAR-файлы) и Referenced Files (Ссылки на файлы) можно ввести пути к используемым JAR и файлам, если они есть. Вы можете также просматривать файлы в виртуальной файловой системе Azure, которая сейчас поддерживает только кластер ADLS 2 поколения. Дополнительные сведения о конфигурации Apache Spark см. здесь. Ознакомьтесь также со статьей Краткое руководство. Использование Обозревателя службы хранилища Azure для создания большого двоичного объекта в хранилище объекта.
    Job Upload Storage (Хранилище обновлений заданий) Разверните раздел, чтобы отобразить дополнительные параметры.
    Тип хранилища Из раскрывающегося списка выберите Use Azure Blob to upload (Для передачи использовать большой двоичный объект Azure).
    Учетная запись хранения Введите имя своей учетной записи хранения.
    Storage Key (Ключ хранилища) Введите свой ключ к хранилищу данных.
    Контейнер хранилища Если вы ввели значения в поля Учетная запись хранения и Storage Key (Ключ хранилища), из раскрывающегося списка выберите контейнер хранилища.

    The Spark Submission dialog box.

  4. Щелкните SparkJobRun, чтобы отправить проект в выбранный кластер. На вкладке Remote Spark Job in Cluster (Удаленное задание Spark в кластере) внизу показан ход выполнения задания. Чтобы остановить работу приложения, нажмите красную кнопку.

    Apache Spark Submission window.

Локальная и удаленная отладка приложений Apache Spark в кластере HDInsight

Мы также рекомендуем еще один способ отправки приложения Spark в кластер. Он заключается в задании параметров конфигураций запуска и отладки в интегрированной среде разработки. См. статью Удаленная или локальная отладка приложений Apache Spark в кластере HDInsight с помощью набора Azure Toolkit for IntelliJ через SSH.

Доступ к кластерам HDInsight Spark и управление ими с помощью набора средств Azure для IntelliJ

С помощью Azure Toolkit for IntelliJ можно выполнять разные операции. Большинство операций инициируется из Azure Explorer. В строке меню выберите Представление>Окно инструментов>Azure Explorer.

Доступ к представлению задания

  1. В Azure Explorer перейдите к HDInsight><Ваш кластер>>Задания.

    IntelliJ Azure Explorer Job view node.

  2. В области справа на вкладке Spark Job View (Просмотр заданий Spark) отображаются все приложения, запускаемые в кластере. Выберите имя приложения, дополнительные сведения о котором вы хотите просмотреть.

    Spark Job View Application details.

  3. Чтобы отобразить базовые сведения о выполняющемся задании, наведите указатель мыши на граф задания. Чтобы просмотреть этапы графа и сведения, создаваемые каждым заданием, выберите узел на графе задания.

    Spark Job View Job stage details.

  4. Выберите вкладку Журнал, чтобы просмотреть часто используемые журналы, включая Driver Stderr, Driver Stdout и Directory Info.

    Spark Job View Log details.

  5. Вы можете просмотреть пользовательский интерфейс журнала Spark и пользовательский интерфейс YARN (на уровне приложения). Выберите ссылку в верхней части окна.

Доступ к серверу журнала Spark

  1. В Azure Explorer разверните HDInsight, щелкните имя кластера Spark правой кнопкой мыши и выберите Open Spark History UI (Открыть пользовательский интерфейс журнала Spark).

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

  3. На панели мониторинга сервера журнала Spark вы сможете найти приложение, выполнение которого только что было завершено, по его имени. В приведенном выше коде имя приложения было указано с помощью val conf = new SparkConf().setAppName("myApp"). Приложение Spark называется myApp.

Запуск портала Ambari

  1. В Azure Explorer разверните HDInsight, щелкните имя кластера Spark правой кнопкой мыши и выберите Open Cluster Management Portal (Ambari) (Открыть портал управления кластерами (Ambari)).

  2. При появлении запроса введите учетные данные администратора для кластера. Вы указали эти учетные данные во время установки кластера.

Управление подписками Azure

По умолчанию набор средств Azure для IntelliJ содержит список кластеров Spark из всех ваших подписок Azure. При необходимости можно указать подписки, к которым необходимо получить доступ.

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

  2. В окне Выбрать подписки снимите флажки напротив подписок, доступ к которым вам не требуется, и выберите Закрыть.

Консоль Spark

Вы можете запустить локальную консоль Spark (Scala) или консоль интерактивного сеанса Spark Livy (Scala).

Локальная консоль Spark (Scala)

Убедитесь в том, что есть необходимый файл WINUTILS.EXE.

  1. В строке меню выберите Run (Запуск)>Edit Configurations... (Изменить конфигурации).

  2. В левой панели окна Run/Debug Configurations (Конфигурации запуска или отладки) перейдите к Apache Spark on HDInsight (Apache Spark в HDInsight)>[Spark on HDInsight] myApp (myApp [Spark в HDInsight]).

  3. В главном окне выберите вкладку Locally Run.

  4. Укажите следующие значения и нажмите кнопку ОК:

    Свойство Значение
    Главный класс задания значение по умолчанию — имя главного класса из выбранного файла. Класс можно изменить, нажав значок-многоточие (...) и выбрав другой класс.
    Переменные среды Проверьте правильность значения HADOOP_HOME.
    Расположение файла WINUTILS.exe Проверьте правильность пути.

    Local Console Set Configuration.

  5. В проекте перейдите в myApp>src>main>scala>myApp.

  6. В строке меню выберите Tools (Сервис)>Spark Console (Консоль Spark)>Run Spark Local Console(Scala) (Запустить локальную консоль Spark (Scala)).

  7. После этого могут появиться два диалоговых окна с запросом на автоматическое исправление зависимостей. Если нужно исправить их, выберите Auto Fix (Автоматическое исправление).

    IntelliJ IDEA Spark Auto Fix dialog1.

    IntelliJ IDEA Spark Auto Fix dialog2.

  8. Консоль должна выглядеть примерно так, как показано ниже. В окне консоли введите sc.appName и нажмите клавиши CTRL+ВВОД. Отобразится результат. Чтобы закрыть локальную консоль, нажмите красную кнопку.

    IntelliJ IDEA local console result.

Консоль интерактивного сеанса Spark Livy (Scala)

  1. В строке меню выберите Run (Запуск)>Edit Configurations... (Изменить конфигурации).

  2. В левой панели окна Run/Debug Configurations (Конфигурации запуска или отладки) перейдите к Apache Spark on HDInsight (Apache Spark в HDInsight)>[Spark on HDInsight] myApp (myApp [Spark в HDInsight]).

  3. В главном окне выберите вкладку Remotely Run in Cluster.

  4. Укажите следующие значения и нажмите кнопку ОК:

    Свойство Значение
    Кластеры Spark (только Linux) Выберите кластер HDInsight Spark, в котором вы хотите запустить приложение.
    Имя главного класса значение по умолчанию — имя главного класса из выбранного файла. Класс можно изменить, нажав значок-многоточие (...) и выбрав другой класс.

    Interactive Console Set Configuration.

  5. В проекте перейдите в myApp>src>main>scala>myApp.

  6. В строке меню выберите Tools (Сервис)>Spark Console (Консоль Spark)>Run Spark Livy Interactive Session Console(Scala) (Запустить консоль интерактивного сеанса Spark Livy (Scala)).

  7. Консоль должна выглядеть примерно так, как показано ниже. В окне консоли введите sc.appName и нажмите клавиши CTRL+ВВОД. Отобразится результат. Чтобы закрыть локальную консоль, нажмите красную кнопку.

    IntelliJ IDEA Interactive Console Result.

Отправка выбранного фрагмента кода в консоль Spark

Удобно предвидеть результат сценария, отправив код в локальную консоль или консоль интерактивного сеанса Livy (Scala). Выделите код в файле Scala, а затем в контекстном меню выберите пункт Send Selection To Spark Console (Отправить выделенный фрагмент в консоль Spark). Выделенный код будет отправлен в консоль. Результат отобразится в консоли после кода. Консоль проверит наличие ошибок.

Send Selection to Spark Console.

Интеграция с брокером удостоверений HDInsight (HIB)

Подключение к кластеру HDInsight ESP с помощью брокера удостоверений (HIB)

Вы можете выполнить обычный вход в подписку Azure, чтобы подключиться к кластеру HDInsight ESP с брокером удостоверений (HIB). После входа вы увидите список кластеров в Azure Explorer. Указания см. в разделе Подключение к кластеру HDInsight.

Запуск приложения Spark Scala в кластере HDInsight ESP с брокером удостоверений (HIB)

Отправку задания в кластер HDInsight ESP с брокером удостоверений (HIB) можно выполнить обычным образом. Указания см. в разделе Запуск приложения Spark Scala в кластере HDInsight Spark.

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

upload path in the configuration.

Консоль Spark в кластере HDInsight ESP с брокером удостоверений (HIB)

В кластере HDInsight ESP с брокером удостоверений (HIB) можно запустить консоль (Scala) Spark в локальном режиме или в интерактивном режиме Livy. Дополнительные инструкции см. в разделе Консоль Spark.

Примечание.

Для кластера HDInsight ESP с брокером удостоверений (HIB) связь кластера и удаленная отладка приложений Apache Spark в настоящее время не поддерживается.

Роль только для чтения

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

  1. Войдите с помощью учетной записи роли только для чтения.

  2. В Azure Explorer разверните HDInsight, чтобы просмотреть кластеры HDInsight в своей подписке. Кластеры с пометкой Role:Reader, имеют только разрешение роли только для чтения.

    `IntelliJ Azure Explorer Role:Reader`.

  3. Щелкните правой кнопкой мыши кластер с разрешением роли только для чтения. Выберите Link this cluster (Связать этот кластер) из контекстного меню, чтобы связать кластер. Введите имя пользователя и пароль Ambari.

    IntelliJ Azure Explorer link this cluster.

  4. Если кластер связан успешно, HDInsight будет обновлен. Этап кластера станет связанным.

    IntelliJ Azure Explorer linked dialog.

  1. Щелкните узел Задания и появится всплывающее окно Cluster Job Access Denied (Доступ к заданию кластера запрещен).

  2. Щелкните Link this cluster (Связать этот кластер), чтобы связать кластер.

    cluster job access denied dialog.

  1. Создайте конфигурацию HDInsight. Выберите Remotely Run in Cluster (Удаленный запуск в кластере).

  2. Выберите кластер, у которого есть разрешение роли только для чтения для Spark clusters(Linux only) (Кластеры Spark (только Linux)). Появится сообщение с предупреждением. Вы можете щелкнуть Связать этот кластер, чтобы связать кластер.

    IntelliJ IDEA run/debug configuration create.

Просмотр учетных записей хранения

  • Для кластеров с разрешением роли только для чтения щелкните узел Учетные записи хранения и появится всплывающее окно Storage Access Denied (Доступ к хранилищу запрещен). Выберите Открыть обозреватель службы хранилища Azure, чтобы открыть Обозреватель службы хранилища.

    `IntelliJ IDEA Storage Access Denied`.

    IntelliJ IDEA Storage Access Denied button.

  • Для связанных кластеров щелкните узел Учетные записи хранения и появится всплывающее окно Storage Access Denied (Доступ к хранилищу запрещен). Выберите Открыть обозреватель службы хранилища Azure, чтобы открыть Обозреватель службы хранилища.

    `IntelliJ IDEA Storage Access Denied2`.

    IntelliJ IDEA Storage Access Denied2 button.

Преобразование имеющихся приложений IntelliJ IDEA для использования набора средств Azure для IntelliJ

Имеющиеся приложения Spark Scala, созданные в IntelliJ IDEA, можно преобразовать и сделать совместимыми с набором средств Azure для IntelliJ. Затем вы сможете использовать подключаемый модуль для отправки приложений в кластер HDInsight Spark.

  1. Для имеющегося приложения Spark Scala, созданного с помощью IntelliJ IDEA, откройте соответствующий файл .iml.

  2. На корневом уровне вы увидите элемент module следующего вида:

    <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
    

    Измените элемент, добавив UniqueKey="HDInsightTool", чтобы элемент module выглядел следующим образом:

    <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" UniqueKey="HDInsightTool">
    
  3. Сохраните изменения. Ваше приложение станет совместимым с набором средств Azure для IntelliJ. Это можно проверить, правой кнопкой мыши щелкнув имя проекта в структуре проекта. Во всплывающем меню должен появиться пункт Submit Spark Application to HDInsight (Отправить приложение Spark в HDInsight).

Очистка ресурсов

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

  1. Войдите на портал Azure.

  2. В поле Поиск в верхней части страницы введите HDInsight.

  3. Выберите Кластеры HDInsight в разделе Службы.

  4. В списке кластеров HDInsight, который отобразится, выберите ... рядом с кластером, созданным при работе с этой статьей.

  5. Выберите команду Удалить. Выберите Да.

Azure portal deletes HDInsight cluster.

Ошибки и решение

Распакуйте папку src как источники при сбое сборки, как показано ниже:

Screenshot showing the build failed.

Отмените метку папки src в качестве источников для решения этой проблемы:

  1. Перейдите к файлу и выберите структуру проекта.

  2. Выберите модули в Параметры проекта.

  3. Выберите src-файл и отметите его как источники.

  4. Нажмите кнопку "Применить", а затем нажмите кнопку "ОК", чтобы закрыть диалоговое окно.

    Screenshot showing the unmark the src as sources.

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

Из этой статьи вы узнали, как использовать подключаемый модуль Azure Toolkit for IntelliJ для разработки приложений Apache Spark, написанных на Scala. Затем вы отправили их на кластер HDInsight Spark непосредственно из интегрированной среды разработки (IDE) IntelliJ. Теперь переходите к следующей статье, в которой объясняется, как перенести зарегистрированные в Apache Spark данные в средство бизнес-аналитики, например в Power BI.