Использование 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;
Необходимые компоненты
Кластер Apache Spark в HDInsight. Инструкции см. в статье Начало работы. Создание кластера Apache Spark в HDInsight на платформе Linux и выполнение интерактивных запросов с помощью SQL Spark. Поддерживаются только кластеры HDinsight в общедоступном облаке, а другие типы защищенных облаков (например, облака для государственных организаций) не поддерживаются.
Комплект разработчика Oracle Java. В этой статье используется Java версии 8.0.202.
IntelliJ IDEA. В этой статье используется среда IntelliJ IDEA версии 2018.3.4.
Azure Toolkit for IntelliJ. Дополнительные сведения см. в статье Установка набора средств Azure для IntelliJ.
Установка подключаемого модуля Scala для IntelliJ IDEA
Чтобы установить подключаемый модуль Scala, сделайте следующее.
Откройте IntelliJ IDEA.
На экране приветствия выберите Configure (Настройка)>Plugins (Подключаемые модули), чтобы открыть окно подключаемых модулей.
Выберите Install (Установить) в области подключаемого модуля Scala в новом окне.
После успешной установки подключаемого модуля необходимо перезапустить интегрированную среду разработки.
Создание приложения Spark Scala для кластера HDInsight Spark
Запустите IntelliJ IDEA и выберите Create New Project (Создать проект), чтобы открыть окно New Project (Новый проект).
На левой панели щелкните Azure Spark/HDInsight.
В главном окне выберите Spark Project (Scala) (Проект Spark (Scala)).
Из раскрывающегося списка Инструмент сборки выберите один из следующих вариантов:
Maven для поддержки мастера создания проекта Scala.
SBT для управления зависимостями и создания проекта Scala.
Выберите Далее.
В окне 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). Выберите Готово. Может пройти несколько минут, прежде чем проект станет доступным.
Проект Spark автоматически создает артефакт. Чтобы просмотреть артефакт, выполните указанные ниже действия.
a. В строке меню выберите File (Файл)>Project Structure... (Структура проекта…).
b. В окне структуры проекта щелкните Artifacts (Артефакты).
c. После просмотра артефакта щелкните Cancel (Отменить).
Добавьте исходный код приложения, сделав следующее.
a. В иерархии проекта перейдите к myApp>src>main>scala.
b. Щелкните правой кнопкой мыши папку scala, а затем выберите New (Новый)>Scala Class (Класс Scala).
c. В диалоговом окне Create New Scala Class (Создание класса Scala) введите имя, в раскрывающемся списке Kind (Вид) выберите Object (Объект) и нажмите кнопку ОК.
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.
В строке меню выберите Представление>Окно инструментов>Azure Explorer.
В Azure Explorer щелкните правой кнопкой мыши узел Azure, а затем выберите Войти.
В диалоговом окне Вход в Azure выберите Имя пользователя устройства, а затем — Войти.
В диалоговом окне Azure Device Login (Вход в систему устройства Azure) щелкните Copy&Open (Копировать и открыть).
В интерфейсе браузера вставьте код и нажмите кнопку Далее.
Введите учетные данные Azure и закройте браузер.
После входа в диалоговом окне Select Subscriptions (Выбор подписок) будут перечислены все подписки Azure, связанные с указанными учетными данными. Выберите свою подписку, а затем нажмите кнопку Выбрать.
В Azure Explorer разверните HDInsight, чтобы просмотреть кластеры HDInsight Spark в своей подписке.
Далее можно развернуть узел имени кластера, чтобы увидеть ресурсы (например, учетные записи хранения), связанные с ним.
Связывание кластера
Можно связать кластер HDInsight с помощью управляемого имени пользователя Apache Ambari. Аналогичным образом, присоединенный к домену кластер HDInsight можно связать с помощью домена и имени пользователя, например user1@contoso.com
. Также вы можете связать кластер службы Livy.
В строке меню выберите Представление>Окно инструментов>Azure Explorer.
В Azure Explorer щелкните правой кнопкой мыши узел HDInsight, а затем — Link A Cluster (Связать кластер).
Доступные параметры в окне Link A Cluster (Связывание кластера) зависят от значения, которое вы выбрали из раскрывающегося списка Link Resource Type (Связать тип ресурса). Введите свои значения, а затем нажмите кнопку ОК.
Кластер HDInsight
Свойство Значение Link Resource Type (Связать тип ресурса) Из раскрывающегося списка выберите HDInsight Cluster (Кластер HDInsight). Cluster Name/URL (Имя или URL-адрес кластера) Введите имя кластера. Тип проверки подлинности Оставьте значение Basic Authentication (Обычная аутентификация) Имя пользователя Введите имя пользователя кластера. Значение по умолчанию — admin. Пароль Введите пароль для этого имени пользователя. Livy Service (Служба Livy)
Свойство Значение Link Resource Type (Связать тип ресурса) Из раскрывающегося списка выберите Livy Service (Служба Livy). Livy Endpoint (Конечная точка Livy) Введите конечную точку Livy Имя кластера Введите имя кластера. Yarn Endpoint (Конечная точка Yarn) Необязательно. Тип проверки подлинности Оставьте значение Basic Authentication (Обычная аутентификация) Имя пользователя Введите имя пользователя кластера. Значение по умолчанию — admin. Пароль Введите пароль для этого имени пользователя.
В узле HDInsight отобразится связанный кластер.
В обозревателе Azure также можно удалить связь кластера.
Запуск приложения Spark Scala в кластере HDInsight Spark
После создания приложение Scala можно отправить в кластер.
В проекте перейдите в myApp>src>main>scala>myApp. Щелкните правой кнопкой мыши папку myApp и выберите Submit Spark Application (Запустить приложение Spark). Этот параметр скорее всего будет расположен в нижней части списка.
В диалоговом окне Запустить приложение Spark выберите 1. Spark в HDInsight.
В окне 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 (Ключ хранилища), из раскрывающегося списка выберите контейнер хранилища. Щелкните SparkJobRun, чтобы отправить проект в выбранный кластер. На вкладке Remote Spark Job in Cluster (Удаленное задание Spark в кластере) внизу показан ход выполнения задания. Чтобы остановить работу приложения, нажмите красную кнопку.
Локальная и удаленная отладка приложений Apache Spark в кластере HDInsight
Мы также рекомендуем еще один способ отправки приложения Spark в кластер. Он заключается в задании параметров конфигураций запуска и отладки в интегрированной среде разработки. См. статью Удаленная или локальная отладка приложений Apache Spark в кластере HDInsight с помощью набора Azure Toolkit for IntelliJ через SSH.
Доступ к кластерам HDInsight Spark и управление ими с помощью набора средств Azure для IntelliJ
С помощью Azure Toolkit for IntelliJ можно выполнять разные операции. Большинство операций инициируется из Azure Explorer. В строке меню выберите Представление>Окно инструментов>Azure Explorer.
Доступ к представлению задания
В Azure Explorer перейдите к HDInsight><Ваш кластер>>Задания.
В области справа на вкладке Spark Job View (Просмотр заданий Spark) отображаются все приложения, запускаемые в кластере. Выберите имя приложения, дополнительные сведения о котором вы хотите просмотреть.
Чтобы отобразить базовые сведения о выполняющемся задании, наведите указатель мыши на граф задания. Чтобы просмотреть этапы графа и сведения, создаваемые каждым заданием, выберите узел на графе задания.
Выберите вкладку Журнал, чтобы просмотреть часто используемые журналы, включая Driver Stderr, Driver Stdout и Directory Info.
Вы можете просмотреть пользовательский интерфейс журнала Spark и пользовательский интерфейс YARN (на уровне приложения). Выберите ссылку в верхней части окна.
Доступ к серверу журнала Spark
В Azure Explorer разверните HDInsight, щелкните имя кластера Spark правой кнопкой мыши и выберите Open Spark History UI (Открыть пользовательский интерфейс журнала Spark).
При появлении запроса введите учетные данные администратора для кластера, указанные при настройке кластера.
На панели мониторинга сервера журнала Spark вы сможете найти приложение, выполнение которого только что было завершено, по его имени. В приведенном выше коде имя приложения было указано с помощью
val conf = new SparkConf().setAppName("myApp")
. Приложение Spark называется myApp.
Запуск портала Ambari
В Azure Explorer разверните HDInsight, щелкните имя кластера Spark правой кнопкой мыши и выберите Open Cluster Management Portal (Ambari) (Открыть портал управления кластерами (Ambari)).
При появлении запроса введите учетные данные администратора для кластера. Вы указали эти учетные данные во время установки кластера.
Управление подписками Azure
По умолчанию набор средств Azure для IntelliJ содержит список кластеров Spark из всех ваших подписок Azure. При необходимости можно указать подписки, к которым необходимо получить доступ.
В Azure Explorer щелкните правой кнопкой мыши корневой узел Azure, а затем щелкните Выбрать подписки.
В окне Выбрать подписки снимите флажки напротив подписок, доступ к которым вам не требуется, и выберите Закрыть.
Консоль Spark
Вы можете запустить локальную консоль Spark (Scala) или консоль интерактивного сеанса Spark Livy (Scala).
Локальная консоль Spark (Scala)
Убедитесь в том, что есть необходимый файл WINUTILS.EXE.
В строке меню выберите Run (Запуск)>Edit Configurations... (Изменить конфигурации).
В левой панели окна Run/Debug Configurations (Конфигурации запуска или отладки) перейдите к Apache Spark on HDInsight (Apache Spark в HDInsight)>[Spark on HDInsight] myApp (myApp [Spark в HDInsight]).
В главном окне выберите вкладку
Locally Run
.Укажите следующие значения и нажмите кнопку ОК:
Свойство Значение Главный класс задания значение по умолчанию — имя главного класса из выбранного файла. Класс можно изменить, нажав значок-многоточие (...) и выбрав другой класс. Переменные среды Проверьте правильность значения HADOOP_HOME. Расположение файла WINUTILS.exe Проверьте правильность пути. В проекте перейдите в myApp>src>main>scala>myApp.
В строке меню выберите Tools (Сервис)>Spark Console (Консоль Spark)>Run Spark Local Console(Scala) (Запустить локальную консоль Spark (Scala)).
После этого могут появиться два диалоговых окна с запросом на автоматическое исправление зависимостей. Если нужно исправить их, выберите Auto Fix (Автоматическое исправление).
Консоль должна выглядеть примерно так, как показано ниже. В окне консоли введите
sc.appName
и нажмите клавиши CTRL+ВВОД. Отобразится результат. Чтобы закрыть локальную консоль, нажмите красную кнопку.
Консоль интерактивного сеанса Spark Livy (Scala)
В строке меню выберите Run (Запуск)>Edit Configurations... (Изменить конфигурации).
В левой панели окна Run/Debug Configurations (Конфигурации запуска или отладки) перейдите к Apache Spark on HDInsight (Apache Spark в HDInsight)>[Spark on HDInsight] myApp (myApp [Spark в HDInsight]).
В главном окне выберите вкладку
Remotely Run in Cluster
.Укажите следующие значения и нажмите кнопку ОК:
Свойство Значение Кластеры Spark (только Linux) Выберите кластер HDInsight Spark, в котором вы хотите запустить приложение. Имя главного класса значение по умолчанию — имя главного класса из выбранного файла. Класс можно изменить, нажав значок-многоточие (...) и выбрав другой класс. В проекте перейдите в myApp>src>main>scala>myApp.
В строке меню выберите Tools (Сервис)>Spark Console (Консоль Spark)>Run Spark Livy Interactive Session Console(Scala) (Запустить консоль интерактивного сеанса Spark Livy (Scala)).
Консоль должна выглядеть примерно так, как показано ниже. В окне консоли введите
sc.appName
и нажмите клавиши CTRL+ВВОД. Отобразится результат. Чтобы закрыть локальную консоль, нажмите красную кнопку.
Отправка выбранного фрагмента кода в консоль Spark
Удобно предвидеть результат сценария, отправив код в локальную консоль или консоль интерактивного сеанса Livy (Scala). Выделите код в файле Scala, а затем в контекстном меню выберите пункт Send Selection To Spark Console (Отправить выделенный фрагмент в консоль Spark). Выделенный код будет отправлен в консоль. Результат отобразится в консоли после кода. Консоль проверит наличие ошибок.
Интеграция с брокером удостоверений HDInsight (HIB)
Подключение к кластеру HDInsight ESP с помощью брокера удостоверений (HIB)
Вы можете выполнить обычный вход в подписку Azure, чтобы подключиться к кластеру HDInsight ESP с брокером удостоверений (HIB). После входа вы увидите список кластеров в Azure Explorer. Указания см. в разделе Подключение к кластеру HDInsight.
Запуск приложения Spark Scala в кластере HDInsight ESP с брокером удостоверений (HIB)
Отправку задания в кластер HDInsight ESP с брокером удостоверений (HIB) можно выполнить обычным образом. Указания см. в разделе Запуск приложения Spark Scala в кластере HDInsight Spark.
Отправим необходимые файлы в папку с именем вашей учетной записи входа, и вы сможете увидеть путь отправки в файле конфигурации.
Консоль Spark в кластере HDInsight ESP с брокером удостоверений (HIB)
В кластере HDInsight ESP с брокером удостоверений (HIB) можно запустить консоль (Scala) Spark в локальном режиме или в интерактивном режиме Livy. Дополнительные инструкции см. в разделе Консоль Spark.
Примечание.
Для кластера HDInsight ESP с брокером удостоверений (HIB) связь кластера и удаленная отладка приложений Apache Spark в настоящее время не поддерживается.
Роль только для чтения
Когда пользователи отправляют задания в кластер с разрешением на роль только для чтения, требуются учетные данные Ambari.
Связывание кластера из контекстного меню
Войдите с помощью учетной записи роли только для чтения.
В Azure Explorer разверните HDInsight, чтобы просмотреть кластеры HDInsight в своей подписке. Кластеры с пометкой Role:Reader, имеют только разрешение роли только для чтения.
Щелкните правой кнопкой мыши кластер с разрешением роли только для чтения. Выберите Link this cluster (Связать этот кластер) из контекстного меню, чтобы связать кластер. Введите имя пользователя и пароль Ambari.
Если кластер связан успешно, HDInsight будет обновлен. Этап кластера станет связанным.
Связывание кластера путем развертывания узла "Задания"
Щелкните узел Задания и появится всплывающее окно Cluster Job Access Denied (Доступ к заданию кластера запрещен).
Щелкните Link this cluster (Связать этот кластер), чтобы связать кластер.
Связывание кластера из окна Run/Debug Configurations (Конфигурации запуска и отладки)
Создайте конфигурацию HDInsight. Выберите Remotely Run in Cluster (Удаленный запуск в кластере).
Выберите кластер, у которого есть разрешение роли только для чтения для Spark clusters(Linux only) (Кластеры Spark (только Linux)). Появится сообщение с предупреждением. Вы можете щелкнуть Связать этот кластер, чтобы связать кластер.
Просмотр учетных записей хранения
Для кластеров с разрешением роли только для чтения щелкните узел Учетные записи хранения и появится всплывающее окно Storage Access Denied (Доступ к хранилищу запрещен). Выберите Открыть обозреватель службы хранилища Azure, чтобы открыть Обозреватель службы хранилища.
Для связанных кластеров щелкните узел Учетные записи хранения и появится всплывающее окно Storage Access Denied (Доступ к хранилищу запрещен). Выберите Открыть обозреватель службы хранилища Azure, чтобы открыть Обозреватель службы хранилища.
Преобразование имеющихся приложений IntelliJ IDEA для использования набора средств Azure для IntelliJ
Имеющиеся приложения Spark Scala, созданные в IntelliJ IDEA, можно преобразовать и сделать совместимыми с набором средств Azure для IntelliJ. Затем вы сможете использовать подключаемый модуль для отправки приложений в кластер HDInsight Spark.
Для имеющегося приложения Spark Scala, созданного с помощью IntelliJ IDEA, откройте соответствующий файл
.iml
.На корневом уровне вы увидите элемент 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">
Сохраните изменения. Ваше приложение станет совместимым с набором средств Azure для IntelliJ. Это можно проверить, правой кнопкой мыши щелкнув имя проекта в структуре проекта. Во всплывающем меню должен появиться пункт Submit Spark Application to HDInsight (Отправить приложение Spark в HDInsight).
Очистка ресурсов
Если вы не собираетесь использовать это приложение в дальнейшем, удалите созданный кластер, сделав следующее:
Войдите на портал Azure.
В поле Поиск в верхней части страницы введите HDInsight.
Выберите Кластеры HDInsight в разделе Службы.
В списке кластеров HDInsight, который отобразится, выберите ... рядом с кластером, созданным при работе с этой статьей.
Выберите команду Удалить. Выберите Да.
Ошибки и решение
Распакуйте папку src как источники при сбое сборки, как показано ниже:
Отмените метку папки src в качестве источников для решения этой проблемы:
Перейдите к файлу и выберите структуру проекта.
Выберите модули в Параметры проекта.
Выберите src-файл и отметите его как источники.
Нажмите кнопку "Применить", а затем нажмите кнопку "ОК", чтобы закрыть диалоговое окно.
Следующие шаги
Из этой статьи вы узнали, как использовать подключаемый модуль Azure Toolkit for IntelliJ для разработки приложений Apache Spark, написанных на Scala. Затем вы отправили их на кластер HDInsight Spark непосредственно из интегрированной среды разработки (IDE) IntelliJ. Теперь переходите к следующей статье, в которой объясняется, как перенести зарегистрированные в Apache Spark данные в средство бизнес-аналитики, например в Power BI.