В прошлый раз мы говорили о том, как работают пользовательские функции в Spark. Сегодня поговорим про сборку Spark-приложений, а также рассмотрим, какие механизмы для сборки приложений поддерживает фреймворк Apache Spark. Читайте далее про особенности и применение механизмов для сборки распределенных Spark-приложений.
Сборка приложений в Apache Spark: 2 самых известных инструмента для сборки распределенных приложений
Сборка приложения (application build) — это процесс получения готового программного продукта путем его компиляции (преобразование текста языка программирования в набор машинных кодов) и компоновки (получение исполняемого файла программы, чаще всего с расширением .exe). Сборщик приложений — это программное обеспечение (библиотека или фреймворк), которое служит для автоматизации (без вмешательства пользователя) процесса сборки программного продукта. В этой статье мы рассмотрим 2 самых известных сборщика приложений, которые поддерживает Spark. К ним относятся следующие:
- SBT (Scala Build Tool);
- Maven
Каждый из этих инструментов мы подробнее рассмотрим далее.
SBT
SBT (Scala Build Tool) — это инструмент для сборки приложений, написанных на языке Scala. Параметры SBT-сборки задаются в специальном файле build.sbt, который лежит в корневом каталоге проекта (в папке с названием проекта). Для SBT-сборки используется специальный предметный язык (Domain Specific Language, DSL), который использует операции присваивания значений различным параметрам сборки (например, версия SBT-сборщика, имя проекта или версия интерпретатора Scala) для корректной сборки приложения. Следующий код на DSL-языке SBT-сборщика отвечает за определение базовых параметров сборки распределенного Spark-приложения:
import AssemblyKeys_ // библиотека для создания скомпилированного файла name : = "SparkProject" // имя проекта version : = "1.0" // версия проекта scalaVersion ·= "2.10.3"// версия Scala-интерпретатора
Для подключения зависимостей (для подгрузки необходимых библиотек, использующихся в проекте) используется параметр libraryDependencies
и специальный класс Seq
. Следующий код на DSL-языке SBT-сборщика отвечает за определение зависимостей проекта на базе Spark [1]:
libraryDependencies ++= Seq( // Подгрузка Spark "org.apache.spark" % "spark-core_2.10" % "1.2.0" %"provided", // Подгрузка сторонних библиотек "net.sf.jopt-simple" % "jopt-simple" %"4.3", "joda-time" % "joda-time" % "2.0" "org.apache.spark" % "spark-sql" % "2.4.0" % "provided", "org.apache.spark" % "spark-mllib" % "2.4.0" % "provided")
При сборке Spark-проекта пользователь может сам определять, какие версии библиотек (в том числе и версию фреймворка Spark) нужно подгрузить. Для этого необходимо между знаками «%» в кавычках указать номер версии.
Maven
Maven — это инструмент (фреймворк) для автоматизации сборки приложений на основе описания их структуры в специальных POM-файлах (Project Object Model). POM-файл представляет собой структурированную (упорядоченную) последовательность параметров сборки проекта (например, версия проекта и зависимости) на языке разметки XML (Extensible Markup Language) [2]. Следующий код на языке XML отвечает за определение информации о проекте [3]:
<!-- Имя проекта --> <name>Simple Project</name> <!-- Упаковщик --> <packaging>jar</packaging> <!-- Начальная версия проекта --> <version>l.0</version>
Для сборки Spark-приложения на Maven также необходимо указать зависимости для подгрузки библиотек из необходимых репозиториев. Зависимости указываются в блоке <dependencies> </dependencies>
. Каждая отдельная зависимость выносится в отдельный подблок <dependency> </ dependency>
. Следующий код на языке XML отвечает за определение зависимостей для подгрузки библиотек, использующихся в приложении на базе фреймворка Spark [3]:
<dependencies> <!-- Зависимость Spark --> <dependency> <groupid>org.apache.spark</groupid> <artifactid>spark-core_2.10</artifactid> <version>l.2.0</version> <scope>provided</scope> </dependency> <!-- Сторонняя библиотека --> <dependency> <groupid>net.sf.jopt-simple</groupid> <artifactid>jopt-simple</artifactid> <version>4.3</version> </dependency> <!-- Сторонняя библиотека --> <dependency> <groupid>joda-time</groupid> <artifactid>joda-time</artifactid> <version>2.0</version> </dependency> </dependencies>
Maven используется в основном для проектов, написанных на таких языках, как:
- Java;
- C#;
- Scala
Для сборки Spark-приложений на языке Python можно использовать сценарий spark-submit
, который мы рассматривали в статье про развертывание распределенных Spark-приложений здесь.
Таким образом, благодаря поддержке инструментов автоматической сборки проектов, Spark-приложения легко компилируются и развертываются в распределенной среде (на сервере приложений), освобождая пользователя от долгих «ручных» настроек. Все это делает фреймворк Apache Spark весьма полезным средством для Data Scientist’а и разработчика распределенных Big Data приложений. В следующей статье мы поговорим про сериализацию данных в Spark.
Больше подробностей про применение Apache Spark в проектах анализа больших данных, разработки Big Data приложений и прочих прикладных областях Data Science вы узнаете на практических курсах по Spark в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
- Графовые алгоритмы в Apache Spark
- Машинное обучение в Apache Spark
- Потоковая обработка в Apache Spark
- Основы Apache Spark для разработчиков
- Анализ данных с Apache Spark
Источники
- https://mungingdata.com/apache-spark/introduction-to-sbt/
- https://ru.wikipedia.org/wiki/Apache_Maven
- К.Харау, Э.Ковински, П.Венделл, М.Захария. Изучаем Spark: молниеносный анализ данных