Идеальная платформа для обработки больших данных

Apache Spark - это технология, которая занимает значительное место в общем стеке технологий больших данных, а также в экосистеме Hadoop. Существует высокая вероятность того, что даже новичок в инженерии больших данных знаком со словом «Spark» из-за той искры, которую оно вызвало в сообществах больших данных. Но знаете ли вы его основы и возможности? Честно говоря, я не знал, когда начал, хотя был хорошо знаком с термином «Apache Spark».

Apache Spark - это единый аналитический движок для крупномасштабной обработки данных.

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

На изображении выше вкратце изображен Apache Spark. Основные функции Apache Spark можно разделить на следующие категории.

  • MLlib: это библиотека машинного обучения Apache Spark. Унаследовав функции Apache Spark, любая реализация, выполненная с использованием этой библиотеки, является масштабируемой и легко вписывается в рабочие процессы на основе Hadoop. Источники данных Hadoop, такие как HDFS и HBase, можно легко использовать с Spark MLlib. MLlib хорошо взаимодействует с другими частями Spark, такими как Streaming и SQL. В зависимости от итеративных вычислений Spark MLlib выполняет алгоритмы довольно быстро. MLlib содержит широкий спектр алгоритмов машинного обучения и служебных функций (для предварительной обработки данных, преобразования и настройки параметров и т. Д.)
  • Spark Streaming: это библиотека потоковой обработки Apache Spark. Подобно MLlib, его также можно легко интегрировать с другими частями экосистемы Hadoop и использовать для создания интерактивных приложений с потоковыми данными. Потоковая передача Spark обеспечивает нестандартный механизм отказоустойчивости. Задания потоковой передачи могут быть написаны с использованием такого языка, как Java, Python или Scala, с использованием интегрированного API-интерфейса Spark: https://spark.apache.org/docs/latest/streaming-programming-guide.html
  • Spark SQL: это библиотека Apache Spark для работы со структурированными данными. Spark SQL позволяет нам смешивать запросы SQL с программами Spark, написанными с использованием Java, Python, R или Scala. Это можно сделать с помощью стандартного SQL или DataFrame API (https://spark.apache.org/docs/latest/sql-programming-guide.html). Это позволяет интегрироваться с различными источниками данных, такими как HDFS, Hive, JSON, JDBC, Parquet и т. Д.
  • GraphX ​​: это библиотека Apache Spark для обработки графиков. Это позволяет быстро обрабатывать графики. Кроме того, он объединяет различные операции с графами, такие как исследовательский анализ, ETL и итерационные вычисления графов, в единую систему.

Если вы обратите внимание на Spark Core, вы увидите, что программирование может выполняться на любом языке по вашему выбору из Python, Java, R или Scala. Многие предпочитают программировать Spark с помощью Python или Java, но о Scala никогда нельзя забывать, когда упоминается Spark. Сам Spark написан с использованием Scala и может раскрыть множество преимуществ Spark, поэтому многие системы производственного уровня используют Spark с Scala. Итак, я бы сказал, начать изучать Scala - это хорошая идея, и вы поймете, насколько он похож на Python, как только начнете.

Теперь давайте углубимся в некоторые фундаментальные строительные блоки Apache Spark.

Устойчивые распределенные наборы данных (RDD)

В основе Spark лежит концепция RDD. Известно, что RDD представляют собой отказоустойчивые наборы элементов, с которыми можно работать параллельно. Каждая программа Spark имеет SparkContext (https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkContext.html), который является основной точкой входа в функциональность Spark. СДР создаются этим SparkContext. RDD можно создавать двумя способами.

  1. Распараллеливание существующей коллекции. Этого можно добиться с помощью метода parallelize SparkContext. Как только обычная коллекция преобразована в RDD, элементы в ней могут работать параллельно.
data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data)

2. Ссылка на внешний набор данных: RDD можно создавать из любого источника хранения, поддерживаемого Hadoop, включая вашу локальную файловую систему, HDFS, Cassandra, HBase, Amazon S3 и т. Д. Spark поддерживает текстовые файлы, SequenceFiles и любые другие Hadoop. InputFormat. Текстовые файлы RDD могут быть созданы с помощью метода textFile SparkContext.

distFile = sc.textFile("data.txt")

После создания СДР к элементам СДР можно применять различные параллельные операции. Операции RDD можно разделить на две категории.

  1. Преобразования: эти операции создают новый набор данных из существующего. map, flatMap, filter, independent, sample - вот некоторые из операций преобразования. Они создают новый RDD после применения к другому RDD.
  2. Действия. Эти операции возвращают значение после выполнения вычислений в RDD. собрать, подсчитать, уменьшить, взять и наверх - вот некоторые примеры действий.

Преобразование RDD - это ленивое выполнение, это означает, что они не вычисляют результат сразу. Фактическое вычисление происходит после вызова действия. Но график преобразований строится и запоминается, чтобы его можно было использовать при необходимости. Такой дизайн повышает общую эффективность Spark.

Вот как преобразование и действие применяются к RDD.

lines = sc.textFile("data.txt")
lineLengths = lines.map(lambda s: len(s))
totalLength = lineLengths.reduce(lambda a, b: a + b)

Более подробную информацию о RDD можно найти здесь: https://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-distributed-datasets-rdds

DataFrames

DataFrames - это расширение RDD, которое упрощает работу с ними. DataFrame может быть представлен как набор данных, организованный в именованные столбцы, или DataFrame содержит объекты строк со схемой. Благодаря этому мы можем запускать SQL-запросы на DataFrames. Он концептуально эквивалентен таблице в реляционной базе данных и может быть построен из широкого диапазона источников данных, таких как файлы структурированных данных, таблицы в Hive, внешние базы данных или существующие RDD.

Начиная со Spark 2.0, SparkSession заменяет SparkContext с возможностью создания как RDD, так и DataFrames.

Несмотря на то, что Apache Spark исполнилось почти десять лет, он постоянно развивается и широко используется отраслевыми гигантами. В этом месяце был выпущен Apache Spark 3.0 с множеством улучшений, особенно с такими функциями, как улучшенная поддержка глубокого обучения и улучшенная поддержка Kubernetes и т. Д. Несомненно, он останется гигантом в мире больших данных еще долгое время. Поэтому всегда будет хорошей идеей добавить его в свой набор навыков. Почему бы тебе не начать сейчас? Https://spark.apache.org/