Apache Spark - Apache Spark

Apache Spark
Логотип Spark
Автор (ы) оригинала Матей Захария
Разработчики) Apache Spark
Первый выпуск 26 мая 2014 г . ; 7 лет назад ( 2014-05-26 )
Стабильный выпуск
3.1.1 / 2 марта 2021 г . ; 7 месяцев назад ( 2021-03-02 )
Репозиторий Репозиторий Spark
Написано в Scala
Операционная система Microsoft Windows , macOS , Linux
Доступно в Scala , Java , SQL , Python , R , C # , F #
Тип Аналитика данных, алгоритмы машинного обучения
Лицензия Лицензия Apache 2.0
Веб-сайт искра .apache .org Отредактируйте это в Викиданных

Apache Spark - это единый аналитический движок с открытым исходным кодом для крупномасштабной обработки данных. Spark предоставляет интерфейс для программирования целых кластеров с неявным параллелизмом данных и отказоустойчивостью . Первоначально разработанный в Университете Калифорнии, Беркли «S AMPLab , Спарк кодовая была позже передана в Apache Software Foundation , которая сохранила его с тех пор.

Обзор

Архитектура Apache Spark основана на отказоустойчивом распределенном наборе данных (RDD), доступном только для чтения мультимножестве элементов данных, распределенных по кластеру машин, которое поддерживается отказоустойчивым способом. API Dataframe был выпущен как абстракция поверх RDD, за которым последовал API набора данных. В Spark 1.x RDD был основным интерфейсом прикладного программирования (API), но в Spark 2.x использование Dataset API приветствуется, даже если RDD API не является устаревшим . Технология RDD по-прежнему лежит в основе API набора данных.

Spark и его RDD были разработаны в 2012 году в ответ на ограничения в парадигме кластерных вычислений MapReduce , которая вынуждает использовать определенную линейную структуру потока данных в распределенных программах: программы MapReduce считывают входные данные с диска, сопоставляют функцию с данными, уменьшают результаты map и сохранить результаты редукции на диске. RDD Spark функционируют как рабочий набор для распределенных программ, который предлагает (намеренно) ограниченную форму распределенной разделяемой памяти .

Внутри Apache Spark рабочий процесс управляется как направленный ациклический граф (DAG). Узлы представляют RDD, а ребра представляют операции над RDD.

Spark облегчает реализацию как итерационных алгоритмов , которые обращаются к их набору данных несколько раз в цикле, так и интерактивного / исследовательского анализа данных, т. Е. Повторного запроса данных в стиле базы данных. Задержка таких приложений может быть уменьшена на несколько порядков по сравнению с Apache Hadoop реализации MapReduce. К классу итерационных алгоритмов относятся алгоритмы обучения для систем машинного обучения , которые послужили первоначальным импульсом для разработки Apache Spark.

Apache Spark требует диспетчера кластера и распределенной системы хранения . Для управления кластером Spark поддерживает автономный режим (собственный кластер Spark, где вы можете запустить кластер вручную или использовать сценарии запуска, предоставленные установочным пакетом. Также можно запустить эти демоны на одном компьютере для тестирования), Hadoop YARN , Apache Mesos или Kubernetes . Для распределенного хранилища Spark может взаимодействовать с широким спектром, включая Alluxio , распределенную файловую систему Hadoop (HDFS) , файловую систему MapR (MapR-FS) , Cassandra , OpenStack Swift , Amazon S3 , Kudu , файловую систему Lustre или индивидуальное решение. могут быть реализованы. Spark также поддерживает псевдораспределенный локальный режим, обычно используемый только для целей разработки или тестирования, когда распределенное хранилище не требуется и вместо него может использоваться локальная файловая система; в таком сценарии Spark запускается на одной машине с одним исполнителем на каждое ядро процессора .

Искровое ядро

Spark Core - это основа всего проекта. Он обеспечивает распределенную диспетчеризацию задач, планирование и базовые функции ввода-вывода , предоставляемые через интерфейс прикладного программирования (для Java , Python , Scala , .NET и R ), основанный на абстракции RDD (Java API доступен для других языков JVM, но также может использоваться для некоторых других языков, не относящихся к JVM, которые могут подключаться к JVM, например Julia ). Этот интерфейс зеркало функционала / высшего порядок модель программирования: а «водитель» программа вызывает параллельные операции , такие как карты, фильтр или уменьшить на RDD, передавая функцию Спарк, который затем расписание выполнения функции параллельно на кластере. Эти и дополнительные операции, такие как соединения , принимают RDD в качестве входных данных и создают новые RDD. RDD неизменны, и их операции ленивы ; отказоустойчивость достигается путем отслеживания «происхождения» каждого RDD (последовательности операций, которые его создали), чтобы его можно было восстановить в случае потери данных. СДР могут содержать объекты Python, .NET, Java или Scala любого типа.

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

Типичным примером функционального программирования, ориентированного на RDD, является следующая программа Scala, которая вычисляет частоты всех слов, встречающихся в наборе текстовых файлов, и распечатывает наиболее распространенные из них. Каждая карта , flatMap (вариант карты ) и reduceByKey принимает анонимную функцию, которая выполняет простую операцию с одним элементом данных (или парой элементов), и применяет свой аргумент для преобразования RDD в новый RDD.

val conf = new SparkConf().setAppName("wiki_test") // create a spark config object
val sc = new SparkContext(conf) // Create a spark context
val data = sc.textFile("/path/to/somedir") // Read files from "somedir" into an RDD of (filename, content) pairs.
val tokens = data.flatMap(_.split(" ")) // Split each file into a list of tokens (words).
val wordFreq = tokens.map((_, 1)).reduceByKey(_ + _) // Add a count of one to each token, then sum the counts per word type.
wordFreq.sortBy(s => -s._2).map(x => (x._2, x._1)).top(10) // Get the top 10 words. Swap word and count to sort by count.

Spark SQL

Spark SQL - это компонент поверх Spark Core, который представил абстракцию данных под названием DataFrames, которая обеспечивает поддержку структурированных и полуструктурированных данных . Spark SQL предоставляет предметно-ориентированный язык (DSL) для управления фреймами данных в Scala , Java , Python или .NET . Он также обеспечивает поддержку языка SQL с интерфейсами командной строки и сервером ODBC / JDBC . Хотя в DataFrames отсутствует проверка типов во время компиляции, предоставляемая RDD, начиная со Spark 2.0, строго типизированный DataSet также полностью поддерживается Spark SQL.

import org.apache.spark.sql.SparkSession

val url = "jdbc:mysql://yourIP:yourPort/test?user=yourUsername;password=yourPassword" // URL for your database server.
val spark = SparkSession.builder().getOrCreate() // Create a Spark session object

val df = spark
  .read
  .format("jdbc")
  .option("url", url)
  .option("dbtable", "people")
  .load()

df.printSchema() // Looks the schema of this DataFrame.
val countsByAge = df.groupBy("age").count() // Counts people by age

//or alternatively via SQL:
//df.createOrReplaceTempView("people")
//val countsByAge = spark.sql("SELECT age, count(*) FROM people GROUP BY age")

Spark Streaming

Spark Streaming использует возможность быстрого планирования Spark Core для выполнения потоковой аналитики . Он принимает данные в мини-пакетах и ​​выполняет преобразования RDD для этих мини-пакетов данных. Такой дизайн позволяет использовать тот же набор кода приложения, написанный для пакетной аналитики, в потоковой аналитике, что упрощает реализацию лямбда-архитектуры . Однако это удобство сопровождается штрафом в виде задержки, равной продолжительности мини-пакета. Другие механизмы потоковой передачи данных, которые обрабатывают событие за событием, а не мини-пакетами, включают Storm и потоковый компонент Flink . Spark Streaming имеет встроенную поддержку для использования из сокетов Kafka , Flume , Twitter , ZeroMQ , Kinesis и TCP / IP .

В Spark 2.x для поддержки потоковой передачи также предоставляется отдельная технология, основанная на наборах данных, называемая структурированной потоковой передачей, которая имеет интерфейс более высокого уровня.

Spark можно развернуть как в традиционном локальном центре обработки данных, так и в облаке .

Библиотека машинного обучения MLlib

Spark MLlib - это распределенная среда машинного обучения поверх Spark Core, которая, во многом благодаря архитектуре Spark с распределенной памятью, в девять раз быстрее, чем реализация на основе диска, используемая Apache Mahout (согласно тесты, выполненные разработчиками MLlib для альтернативных реализаций метода наименьших квадратов (ALS) и до того, как сам Mahout получил интерфейс Spark), и масштабируется лучше, чем Vowpal Wabbit . Было реализовано множество распространенных алгоритмов машинного обучения и статистики, которые поставляются с MLlib, что упрощает крупномасштабные конвейеры машинного обучения , в том числе:

GraphX

GraphX ​​- это распределенная среда обработки графов поверх Apache Spark. Поскольку он основан на неизменяемых RDD, графы неизменяемы, и поэтому GraphX ​​не подходит для графов, которые необходимо обновить, не говоря уже о транзакционной манере, такой как база данных графов . GraphX ​​предоставляет два отдельных API для реализации алгоритмов с массовым параллелизмом (таких как PageRank ): абстракция Pregel и более общий API в стиле MapReduce. В отличие от своего предшественника Bagel, который официально объявлен устаревшим в Spark 1.6, GraphX ​​полностью поддерживает графы свойств (графы, в которых свойства могут быть прикреплены к ребрам и вершинам).

GraphX ​​можно рассматривать как версию Apache Giraph для Spark в оперативной памяти , в которой используется дисковый MapReduce Hadoop.

Как и Apache Spark, GraphX ​​изначально начинался как исследовательский проект в AMPLab и Databricks Калифорнийского университета в Беркли, а затем был передан в дар Apache Software Foundation и проекту Spark.

Языковая поддержка

Apache Spark имеет встроенную поддержку Scala, Java, R и Python со сторонней поддержкой .NET CLR, Julia и других.

История

Первоначально Spark был запущен Матей Захария в AMPLab Калифорнийского университета в Беркли в 2009 году, а в 2010 году был открыт исходный код по лицензии BSD .

В 2013 году проект был передан в дар Apache Software Foundation и сменил его лицензию на Apache 2.0 . В феврале 2014 года Spark стал проектом Apache верхнего уровня .

В ноябре 2014 года компания Databricks основателя Spark М. Захария установила новый мировой рекорд в крупномасштабной сортировке с использованием Spark.

В 2015 году у Spark было более 1000 участников, что сделало его одним из самых активных проектов Apache Software Foundation и одним из самых активных проектов больших данных с открытым исходным кодом .

Версия Исходная дата выпуска Последняя версия Дата выхода
Старая версия, больше не поддерживается: 0,5 2012-06-12 0.5.1 2012-10-07
Старая версия, больше не поддерживается: 0,6 2012-10-14 0.6.2 2013-02-07
Старая версия, больше не поддерживается: 0,7 2013-02-27 0.7.3 2013-07-16
Старая версия, больше не поддерживается: 0,8 2013-09-25 0.8.1 2013-12-19
Старая версия, больше не поддерживается: 0,9 2014-02-02 0.9.2 2014-07-23
Старая версия, больше не поддерживается: 1.0 2014-05-26 1.0.2 2014-08-05
Старая версия, больше не поддерживается: 1.1 2014-09-11 1.1.1 2014-11-26
Старая версия, больше не поддерживается: 1.2 2014-12-18 1.2.2 2015-04-17
Старая версия, больше не поддерживается: 1.3 2015-03-13 1.3.1 2015-04-17
Старая версия, больше не поддерживается: 1.4 2015-06-11 1.4.1 2015-07-15
Старая версия, больше не поддерживается: 1.5 2015-09-09 1.5.2 2015-11-09
Старая версия, больше не поддерживается: 1.6 2016-01-04 1.6.3 2016-11-07
Старая версия, больше не поддерживается: 2.0 2016-07-26 2.0.2 2016-11-14
Старая версия, больше не поддерживается: 2.1 2016-12-28 2.1.3 2018-06-26
Старая версия, больше не поддерживается: 2.2 2017-07-11 2.2.3 2019-01-11
Старая версия, больше не поддерживается: 2.3 2018-02-28 2.3.4 2019-09-09
Старая версия, но все еще поддерживается: 2.4 LTS 2018-11-02 2.4.8 2021-05-17
Текущая стабильная версия: 3.0 2020-06-18 3.0.3 2021-06-01
Текущая стабильная версия: 3.1 2021-03-02 3.1.2 2021-06-01
Легенда:
Старая версия
Старая версия, все еще поддерживается
Последняя версия
Последняя предварительная версия
Будущий выпуск

Разработчики

Apache Spark разработан сообществом. Проект управляется группой, которая называется «Комитет по управлению проектом» (КУП). Нынешняя ЧВК - Аарон Дэвидсон, Энди Конвински, Эндрю Ор, Анкур Дэйв, Роберт Джозеф Эванс, ДБ Цай, Донджун Хён, Феликс Чунг, Хюкджин Квон, Хаоюань Ли, Рам Шрихарша, Холден Карау , Герман ван Ховелл, Имран Рашид, Джейсон Дай. , Джозеф Курата Брэдли, Джозеф Э. Гонсалес, Джош Розен, Джерри Шао, Кей Остерхаут, Ченг Лиан, Сяо Ли, Марк Хамстра, Майкл Армбраст, Матей Захария , Сянгруй Мэн, Николас Пентрит, Мошараф Чоудхури, Мридул Шарлидхаран, Прайдул Шарлидхаран, Прайдул Шарлидхаран Венделл, Рейнольд Синь , Райан ЛеКомпте, Шейн Хуанг, Шиварам Венкатараман, Шон Макнамара, Шон Р. Оуэн, Стивен Хаберман, Татхагата Дас, Томас Грейвс, Томас Дудзяк, Такуя Уешин, Марсело Масьеро Ван Сязин, Венчен Эндрю, Чарльз Инь Хуай, Янбо Лян, Шисюн Чжу.

Смотрите также

Примечания

использованная литература

внешние ссылки