Руководство. Создание приложения Scala Maven для Apache Spark в HDInsight с помощью IntelliJ

Из этого руководства вы узнаете, как создать приложение Apache Spark на языке Scala в Apache Maven с помощью IntelliJ IDEA. В примере из этой статьи в качестве системы сборки используется Apache Maven, а в качестве основы используется существующий архетип Maven для Scala, предоставляемый IntelliJ IDEA. Создание приложения Scala в IntelliJ IDEA включает в себя следующие этапы:

  • использование Maven в качестве системы сборки;
  • обновление файла объектной модели проектов для разрешения зависимостей модуля Spark;
  • написание приложения на языке Scala;
  • создание JAR-файла, который можно отправить в кластеры HDInsight Spark;
  • запуск приложений с помощью Livy в кластере Spark.

В этом руководстве описано следующее:

  • Установка подключаемого модуля Scala для IntelliJ IDEA
  • Разработка приложения Scala Maven с помощью IntelliJ.
  • Создание автономного проекта Scala

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

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

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

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

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

    Screenshot showing IntelliJ Welcome Screen.

  3. Выберите Установить для Azure Toolkit for IntelliJ.

    Screenshot showing IntelliJ Azure Tool Kit.

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

    Screenshot showing IntelliJ Scala Plugin.

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

Создание приложения с помощью IntelliJ

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

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

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

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

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

    Screenshot showing create application.

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

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

    Свойство Description
    Имя проекта Введите имя.
    Расположение проекта Введите расположение для сохранения проекта.
    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).

    IntelliJ IDEA Selecting the Spark SDK.

  7. Выберите Готово.

Создание автономного проекта Scala

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

  2. Выберите Maven в левой области.

  3. Выберите пакет в поле Project SDK (Пакет SDK проекта). Если это поле пусто, щелкните New... (Создать...) и перейдите к каталогу установки Java.

  4. Установите флажок Create from archetype (Создать на основе архетипа).

  5. В списке архетипов выберите org.scala-tools.archetypes:scala-archetype-simple. Этот архетип создает структуру каталога и скачивает зависимости по умолчанию, необходимые для написания программы Scala.

    Screenshot shows the selected archetype in the New Project window.

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

  7. Разверните Координаты артефакта. Введите соответствующие значения для параметров GroupId и ArtifactId. Значения Name (Имя) и Location (Расположение) заполнятся автоматически. В этом руководстве используются представленные ниже значения.

    • GroupId: com.microsoft.spark.example;
    • ArtifactId: SparkSimpleApp

    Screenshot shows the Artifact Coordinates option in the New Project window.

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

  9. Проверьте параметры и нажмите кнопку Next (Далее).

  10. Проверьте имя и расположение проекта, а затем выберите Finish (Готово). Импорт этого проекта займет несколько минут.

  11. После импорта проекта в области слева выберите SparkSimpleApp>src>test>scala>com>microsoft>spark>example. Щелкните MySpec правой кнопкой мыши и выберите "Удалить...". Этот файл не нужен для приложения. Нажмите кнопку ОК в диалоговом окне.

  12. На следующих шагах описывается обновление файла pom.xml для определения зависимостей приложения Spark Scala. Чтобы автоматически скачать эти зависимости и разрешить их, необходимо настроить Maven.

  13. В меню File (Файл) выберите Settings (Параметры), чтобы открыть окно параметров.

  14. В окне Settings (Параметры) выберите Build, Execution, Deployment (Сборка, выполнение, развертывание)>Build Tools (Средства сборки)>Maven>Importing (Импорт).

  15. Установите флажок Import Maven projects automatically(Импортировать проекты Maven автоматически).

  16. Нажмите кнопку Apply (Применить), а затем нажмите кнопку ОК. Затем вы вернетесь обратно в окно проекта.

    :::image type="content" source="./media/apache-spark-create-standalone-application/configure-maven-download.png" alt-text="Configure Maven for automatic downloads." border="true":::
    
  17. В области слева выберите src>main>scala>com.microsoft.spark.example, а затем двойным щелчком выберите App (Приложение), чтобы открыть App.scala.

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

    package com.microsoft.spark.example
    
    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    
    /**
      * Test IO to wasb
      */
    object WasbIOTest {
        def main (arg: Array[String]): Unit = {
            val conf = new SparkConf().setAppName("WASBIOTest")
            val sc = new SparkContext(conf)
    
            val rdd = sc.textFile("wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
            //find the rows which have only one digit in the 7th column in the CSV
            val rdd1 = rdd.filter(s => s.split(",")(6).length() == 1)
    
            rdd1.saveAsTextFile("wasb:///HVACout")
        }
    }
    
  19. В левой области дважды щелкните pom.xml.

  20. Добавьте следующие сегменты в файл <project>\<properties>:

    <scala.version>2.11.8</scala.version>
    <scala.compat.version>2.11.8</scala.compat.version>
    <scala.binary.version>2.11</scala.binary.version>
    
  21. Добавьте следующие сегменты в файл <project>\<dependencies>:

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_${scala.binary.version}</artifactId>
        <version>2.3.0</version>
    </dependency>
    
    Save changes to pom.xml.
    
  22. Создайте JAR-файл. IntelliJ IDEA позволяет создавать JAR-файлы в качестве артефактов проекта. Выполните следующие действия.

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

    2. В окне Project Structure (Структура проекта) выберите Artifacts (Артефакты)>символ "плюс" +>JAR>From modules with dependencies... (Из модулей с зависимостями...).

      `IntelliJ IDEA project structure add jar`.

    3. В окне Create JAR from Modules (Создание JAR-файла на основе модулей) выберите значок папки в текстовом поле Main Class (Основной класс).

    4. В окне Select Main Class (Выбор основного класса) выберите класс, который отображается по умолчанию, и щелкните ОК.

      `IntelliJ IDEA project structure select class`.

    5. В окне Create JAR from Modules (Создание JAR-файла на основе модулей) выберите вариант extract to the target JAR (Извлечь в целевой JAR-файл) и щелкните ОК. В результате будет создан один JAR-файл, содержащий все зависимости.

      IntelliJ IDEA project structure jar from module.

    6. На вкладке Макет выходных данных содержится список всех JAR-файлов, которые включены в проект Maven. Здесь можно выбрать и удалить файлы, от которых не зависит работа приложения Scala. Из создаваемого приложения можно удалить все файлы, кроме последнего (SparkSimpleApp compile output (Выходные данные компиляции SparkSimpleApp)). Выберите JAR-файлы, которые нужно удалить, и щелкните значок минус -.

      `IntelliJ IDEA project structure delete output`.

      Убедитесь, что установлен флажок Include in project build (Включить в сборку проекта). Это гарантирует, что JAR-файл будет создаваться при каждом создании и обновлении проекта. Нажмите кнопку Apply (Применить), а затем — ОК.

    7. Чтобы создать JAR-файл, выберите Build (Сборка)>Build Artifacts (Артефакты сборки) >Build (Сборка). Компиляция проекта займет около 30 секунд. Выходной JAR-файл будет создан в разделе \out\artifacts.

      IntelliJ IDEA project artifact output.

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

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

  • Скопируйте приложение JAR в большой двоичный объект службы хранилища Azure, связанный с кластером. Вы можете использовать для этого служебную программу командной строки AzCopy. Кроме того, для отправки данных можно использовать множество других клиентов. Дополнительные сведения о них см. в статье Отправка данных для заданий Apache Hadoop в HDInsight.

  • Используйте Apache Livy для удаленной отправки задания приложения в кластер Spark. В кластерах HDInsight Spark есть сервер Livy, который использует конечные точки REST для удаленной отправки заданий Spark. Дополнительные сведения см. в статье об удаленной отправке заданий Apache Spark с помощью Apache Livy и кластеров Spark в HDInsight .

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

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

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

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

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

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

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

Screenshot showing how to delete an HDInsight cluster via the Azure portal.

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

Из этой статьи вы узнали, как создать приложение Apache Spark на языке Scala. Из следующей статьи вы узнаете, как запустить это приложение на кластере HDInsight Spark, используя Livy.