Апач Спарк
![]() | |
Оригинальный автор(ы) | Мэтью Захариас |
---|---|
Разработчик(и) | Апач Спарк |
Первоначальный выпуск | 26 мая 2014 г |
Стабильная версия | 3.5.0 ( Скала 2.13)
/ 9 сентября 2023 г |
Репозиторий | Репозиторий Spark |
Написано в | Скала [1] |
Операционная система | Microsoft Windows , MacOS , Linux |
Доступно в | Скала , Java , SQL , Python , R , C# , F# |
Тип | Аналитика данных, машинного обучения алгоритмы |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | искра |
Apache Spark — это унифицированная аналитическая система с открытым исходным кодом для крупномасштабной обработки данных. Spark предоставляет интерфейс для программирования кластеров с неявным параллелизмом данных и отказоустойчивостью . Первоначально разработанная в университета в Беркли Калифорнийского AMPLab Spark , кодовая база позже была передана в дар Apache Software Foundation , которая с тех пор поддерживает ее.
Обзор
[ редактировать ]Архитектурная основа Apache Spark лежит в отказоустойчивом распределенном наборе данных (RDD), мультинаборе элементов данных, доступном только для чтения, распределенном по кластеру компьютеров, который поддерживается отказоустойчивым способом. [2] API Dataframe был выпущен как абстракция поверх RDD, за которым последовал API набора данных. В Spark 1.x RDD был основным интерфейсом прикладного программирования (API), но начиная с Spark 2.x поощряется использование Dataset API. [3] даже несмотря на то, что RDD API не устарел . [4] [5] Технология RDD по-прежнему лежит в основе API набора данных. [6] [7]
Spark и его RDD были разработаны в 2012 году в ответ на ограничения MapReduce кластерных вычислений парадигмы , которая навязывает определенную линейную структуру потока данных в распределенных программах: программы MapReduce считывают входные данные с диска, сопоставляют функцию с данными, сокращают результаты сопоставить и сохранить результаты сокращения на диске. RDD Spark функционируют как рабочий набор для распределенных программ, который предлагает (намеренно) ограниченную форму распределенной общей памяти . [8]
Внутри Apache Spark рабочий процесс управляется как направленный ациклический граф (DAG). Узлы представляют собой RDD, а ребра представляют операции над RDD.
Spark облегчает реализацию как итеративных алгоритмов , которые обращаются к своему набору данных несколько раз в цикле, так и интерактивного/исследовательского анализа данных, т. е. повторяющегося базы данных запроса данных в стиле . Задержка таких приложений может быть уменьшена на несколько порядков по сравнению с реализацией Apache Hadoop MapReduce. [2] [9] К классу итерационных алгоритмов относятся алгоритмы обучения систем машинного обучения , которые послужили первоначальным толчком для разработки Apache Spark. [10]
Для Apache Spark требуется менеджер кластера и распределенная система хранения . Для управления кластером Spark поддерживает автономный режим (собственный кластер Spark, где вы можете запустить кластер вручную или использовать сценарии запуска, предоставляемые установочным пакетом. Также возможно запустить эти демоны на одной машине для тестирования), Hadoop YARN , Apache Mesos или Kubernetes . [11] Для распределенного хранилища Spark может взаимодействовать с широким спектром, включая Alluxio , распределенную файловую систему Hadoop (HDFS) , [12] Файловая система MapR (MapR-FS) , [13] Кассандра , [14] OpenStack Swift , Amazon S3 , Kudu , файловая система Lustre , [15] или может быть реализовано индивидуальное решение. Spark также поддерживает псевдораспределенный локальный режим, обычно используемый только в целях разработки или тестирования, где распределенное хранилище не требуется и вместо него можно использовать локальную файловую систему; в таком сценарии Spark запускается на одной машине с одним исполнителем на каждое ядро ЦП .
Искровое ядро
[ редактировать ]Spark Core — это основа всего проекта. Он обеспечивает распределенную диспетчеризацию задач, планирование и базовые функции ввода-вывода , предоставляемые через интерфейс прикладного программирования (для Java , Python , Scala , .NET). [16] и R RDD ), основанный на абстракции (Java API доступен для других языков JVM, но его также можно использовать для некоторых других языков, отличных от JVM, которые могут подключаться к JVM, таких как Julia [17] ). Этот интерфейс отражает функциональную модель программирования высшего порядка : программа-драйвер вызывает параллельные операции, такие как отображение, фильтрация или сокращение, на RDD, передавая функцию в Spark, который затем планирует параллельное выполнение функции в кластере. [2] Эти операции и дополнительные операции, такие как соединения , принимают RDD в качестве входных данных и создают новые RDD. RDD неизменяемы , а их операции ленивы ; отказоустойчивость достигается за счет отслеживания «происхождения» каждого RDD (последовательности операций, которые его создали), чтобы его можно было восстановить в случае потери данных. RDD могут содержать объекты Python, .NET, Java или Scala любого типа.
Помимо функционального стиля программирования, ориентированного на RDD, Spark предоставляет две ограниченные формы общих переменных: широковещательные переменные ссылаются на данные только для чтения, которые должны быть доступны на всех узлах, а аккумуляторы можно использовать для программирования сокращений в императивном стиле. [2]
Типичным примером функционального программирования, ориентированного на RDD, является следующая программа на Scala, которая вычисляет частоты всех слов, встречающихся в наборе текстовых файлов, и выводит наиболее распространенные из них. Каждый карта , FlatMap (вариант карта ) и сокращениеByKey принимает анонимную функцию , которая выполняет простую операцию с одним элементом данных (или парой элементов) и применяет свой аргумент для преобразования СДР в новый СДР.
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.
Искровой SQL
[ редактировать ]Spark SQL — это компонент поверх Spark Core, который представил абстракцию данных под названием DataFrames. [а] который обеспечивает поддержку структурированных и полуструктурированных данных . Spark SQL предоставляет предметно-ориентированный язык (DSL) для управления DataFrames в Scala , Java , Python или .NET . [16] Он также обеспечивает поддержку языка 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 at 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 Core для выполнения потоковой аналитики . Он принимает данные мини-пакетами и выполняет преобразования RDD для этих мини-пакетов данных. Такая конструкция позволяет использовать тот же набор кода приложения, написанный для пакетной аналитики, в потоковой аналитике, что упрощает реализацию лямбда-архитектуры . [19] [20] Однако за это удобство приходится платить задержкой, равной продолжительности мини-пакета. Другие механизмы потоковой передачи данных, которые обрабатывают событие за событием, а не мини-пакетами, включают Storm и компонент потоковой передачи Flink . [21] В Spark Streaming встроена поддержка использования сокетов Kafka , Flume , Twitter , ZeroMQ , Kinesis и TCP/IP . [22]
В Spark 2.x также предусмотрена отдельная технология, основанная на наборах данных, называемая структурированной потоковой передачей, которая имеет интерфейс более высокого уровня для поддержки потоковой передачи. [23]
Spark можно развернуть как в традиционном локальном центре обработки данных , так и в облаке . [24]
Библиотека машинного обучения MLlib
[ редактировать ]Spark MLlib — это распределенная платформа машинного обучения на основе Spark Core, которая, во многом благодаря распределенной архитектуре Spark на основе памяти, в девять раз быстрее, чем дисковая реализация, используемая Apache Mahout (по данным тесты, выполненные разработчиками MLlib для реализаций метода попеременных наименьших квадратов (ALS), и до того, как сам Mahout получил интерфейс Spark), и масштабируется лучше, чем Vowpal Wabbit . [25] Многие распространенные алгоритмы машинного обучения и статистические алгоритмы реализованы и поставляются с MLlib, который упрощает крупномасштабные конвейеры машинного обучения , в том числе:
- сводная статистика , корреляции , стратифицированная выборка , проверка гипотез , генерация случайных данных [26]
- Классификация и регрессия : машины опорных векторов , логистическая регрессия , линейная регрессия , наивная байесовская классификация , дерево решений , случайный лес , дерево с градиентным усилением.
- методы совместной фильтрации, включая метод попеременных наименьших квадратов (ALS)
- методы кластерного анализа , включая k-средние и скрытое распределение Дирихле (LDA)
- методы уменьшения размерности, такие как разложение по сингулярным значениям (SVD) и анализ главных компонентов (PCA)
- извлечения и преобразования признаков функции
- алгоритмы оптимизации , такие как стохастический градиентный спуск , BFGS с ограниченной памятью (L-BFGS)
ГрафX
[ редактировать ]GraphX — это распределенная среда обработки графов на базе Apache Spark. Поскольку он основан на RDD, которые являются неизменяемыми, графы являются неизменяемыми, и поэтому GraphX не подходит для графов, которые необходимо обновлять, не говоря уже о транзакционных методах, таких как база данных графов . [27] GraphX предоставляет два отдельных API для реализации алгоритмов массового параллелизма (таких как PageRank ): абстракция Pregel и более общий API в стиле MapReduce. [28] В отличие от своего предшественника Bagel, который формально был объявлен устаревшим в Spark 1.6, GraphX полностью поддерживает графы свойств (графы, свойства которых можно прикреплять к ребрам и вершинам). [29]
Как и Apache Spark, GraphX изначально начинался как исследовательский проект в AMPLab и Databricks Калифорнийского университета в Беркли, а позже был передан в дар Apache Software Foundation и проекту Spark. [30]
Языковая поддержка
[ редактировать ]Apache Spark имеет встроенную поддержку Scala, Java, SQL, R и Python, а также стороннюю поддержку .NET CLR. [31] Юлия, [32] и многое другое.
История
[ редактировать ]Первоначально Spark был запущен Матеем Захарией в AMPLab Калифорнийского университета в Беркли в 2009 году и открыт в 2010 году под лицензией BSD . [33]
В 2013 году проект был передан в дар Apache Software Foundation и сменил лицензию на Apache 2.0 . В феврале 2014 года Spark стал проектом Apache верхнего уровня . [34]
, возглавляемая основателем Spark М. Захарией, В ноябре 2014 года компания Databricks установила новый мировой рекорд в крупномасштабной сортировке с использованием Spark. [35] [33]
В 2015 году у Spark было более 1000 участников. [36] что делает его одним из самых активных проектов Apache Software Foundation. [37] и один из самых активных проектов больших данных с открытым исходным кодом .
Версия | Исходная дата выпуска | Последняя версия | Дата выпуска |
---|---|---|---|
0.5. | 2012-06-12 | 0.5.2 | 2012-11-22 |
0.6. | 2012-10-15 | 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 [38] |
3.0. | 2020-06-18 | 3.0.3 | 2021-06-01 [39] |
3.1. | 2021-03-02 | 3.1.3 | 2022-02-18 [40] |
3.2. | 2021-10-13 | 3.2.4 | 2023-04-13 [41] |
3.3. | 2022-06-16 | 3.3.3 | 2023-08-21 [42] |
3.4. | 2023-04-13 | 3.4.3 | 2024-04-18 [43] |
3.5. | 2023-09-09 | 3.5.1 | 2024-02-23 [44] |
Легенда: Старая версия Старая версия, все еще поддерживается Последняя версия Последняя предварительная версия |
Скала-версия
[ редактировать ]Spark 3.5.0 основан на Scala 2.13 (и, таким образом, готово работать со Scala 2.12 и 2.13), но его также можно настроить для работы со Scala 3. [45]
Разработчики
[ редактировать ]Apache Spark разработан сообществом. Проектом управляет группа под названием «Комитет по управлению проектом» (PMC). [46]
Релизы обслуживания и EOL
[ редактировать ]Ветки выпуска новых функций, как правило, будут поддерживаться выпусками с исправлениями ошибок в течение 18 месяцев. Например, ветка 2.3.x больше не считается поддерживаемой по состоянию на сентябрь 2019 г., через 18 месяцев после выпуска 2.3.0 в феврале 2018 г. После этого момента больше не следует ожидать выпусков 2.3.x, даже с исправлениями ошибок.
Последний второстепенный выпуск в рамках основного выпуска обычно будет поддерживаться дольше как выпуск «LTS». Например, версия 2.4.0 была выпущена 2 ноября 2018 г. и поддерживалась в течение 31 месяца, пока в мае 2021 г. не была выпущена версия 2.4.8. 2.4.8 — последняя версия, и больше выпусков 2.4.x ожидать не следует даже для исправления ошибок. [47]
См. также
[ редактировать ]Примечания
[ редактировать ]Ссылки
[ редактировать ]- ^ «Искра Релиз 2.0.0» .
MLlib в R: SparkR теперь предлагает API-интерфейсы MLlib [..] Python: PySpark теперь предлагает гораздо больше алгоритмов MLlib»
- ^ Перейти обратно: а б с д Захария, Матей; Чоудхури, Мошараф; Франклин, Майкл Дж.; Шенкер, Скотт; Стойка, Ион. Spark: Кластерные вычисления с рабочими наборами (PDF) . Семинар USENIX по актуальным темам облачных вычислений (HotCloud).
- ^ «Быстрый старт Spark 2.2.0» . apache.org . 11 июля 2017 г. Проверено 19 октября 2017 г.
мы настоятельно рекомендуем вам переключиться на использование набора данных, который имеет лучшую производительность, чем RDD.
- ^ «Список устаревших версий Spark 2.2.0» . apache.org . 11 июля 2017 г. Проверено 10 октября 2017 г.
- ^ Дамджи, Жюль (14 июля 2016 г.). «Сказка о трех API Apache Spark: RDD, DataFrames и Datasets: когда их использовать и почему» . databricks.com . Проверено 19 октября 2017 г.
- ^ Чемберс, Билл (10 августа 2017 г.). «12» . Искра: Полное руководство . О'Рейли Медиа .
практически весь код Spark, который вы запускаете, где DataFrames или Datasets, компилируется в RDD.
[ постоянная мертвая ссылка ] - ^ «Что такое Apache Spark? Учебное пособие по Spark для начинающих» . janbasktraining.com . 13 апреля 2018 г. Проверено 13 апреля 2018 г.
- ^ Захария, Матей; Чоудхури, Мошараф; Дас, Татхагата; Дэйв, Анкур; Ма, Джастин; Макколи, Мерфи; Дж., Майкл; Шенкер, Скотт; Стойка, Ион (2010). Устойчивые распределенные наборы данных: отказоустойчивая абстракция для кластерных вычислений в памяти (PDF) . USENIX симп. Проектирование и внедрение сетевых систем.
- ^ Синь, Рейнольд; Розен, Джош; Захария, Матей; Франклин, Майкл; Шенкер, Скотт; Стойка, Ион (июнь 2013 г.). Shark: SQL и расширенная аналитика в масштабе (PDF) . SIGMOD 2013. arXiv : 1211.6176 . Бибкод : 2012arXiv1211.6176X .
- ^ Харрис, Деррик (28 июня 2014 г.). «4 причины, по которым Spark может превратить Hadoop в гипердвигатель» . Гигаом . Архивировано из оригинала 24 октября 2017 года . Проверено 25 февраля 2016 г. .
- ^ «Обзор режима кластера — Документация по Spark 2.4.0 — Типы диспетчера кластеров» . apache.org . Фонд Апач. 09.07.2019 . Проверено 9 июля 2019 г.
- ^ На рисунке показано соотношение Spark с другими проектами программного обеспечения с открытым исходным кодом, включая Hadoop.
- ^ Матрица поддержки экосистемы MapR
- ^ Доан, ДуйХай (10 сентября 2014 г.). "Re: Кассандра + искра/писпарк" . Пользователь Cassandra (список рассылки) . Проверено 21 ноября 2014 г.
- ^ Ван, Яньдун; Голдстоун, Робин; Ю, Вэйкуань; Ван, Дэн (май 2014 г.). «Характеристика и оптимизация резидентной памяти MapReduce в системах HPC». 2014 28-й Международный симпозиум IEEE по параллельной и распределенной обработке . IEEE. стр. 799–808. дои : 10.1109/IPDPS.2014.87 . ISBN 978-1-4799-3800-1 . S2CID 11157612 .
- ^ Перейти обратно: а б dotnet/spark , платформа .NET, 14 сентября 2020 г. , получено 14 сентября 2020 г.
- ^ «GitHub — DFDX/Spark.jl: привязка Julia для Apache Spark» . Гитхаб . 24 мая 2019 г.
- ^ «Выпуск Spark 1.3.0 | Apache Spark» .
- ^ «Применение лямбда-архитектуры с помощью Spark, Kafka и Cassandra | Pluralsight» . www.pluralsight.com . Проверено 20 ноября 2016 г.
- ^ Шапира, Гвен (29 августа 2014 г.). «Создание лямбда-архитектуры с помощью Spark Streaming» . Cloudera.com . Клаудера. Архивировано из оригинала 14 июня 2016 года . Проверено 17 июня 2016 г.
повторно использовать те же агрегаты, которые мы написали для нашего пакетного приложения, в потоке данных в реальном времени.
- ^ Чинтапалли, Санкет; Дагит, Дерек; Эванс, Бобби; Фаривар, Реза; Грейвс, Томас; Холдербо, Марк; Лю, Чжо; Нусбаум, Кайл; Патил, Кишоркумар; Пэн, Боян Джерри; Пулоски, Пол (май 2016 г.). «Сравнительный анализ потоковых вычислительных систем: потоковая передача Storm, Flink и Spark». Семинары Международного симпозиума IEEE по параллельной и распределенной обработке (IPDPSW) , 2016 г. IEEE. стр. 1789–1792. дои : 10.1109/IPDPSW.2016.138 . ISBN 978-1-5090-3682-0 . S2CID 2180634 .
- ^ Харбанда, Аруш (17 марта 2015 г.). «Получение данных в потоковую передачу Spark» . sigmoid.com . Sigmoid (Саннивейл, Калифорния, компания по производству ИТ-продуктов). Архивировано из оригинала 15 августа 2016 года . Проверено 7 июля 2016 г.
- ^ Захария, Матей (28 июля 2016 г.). «Структурированная потоковая передача в Apache Spark: новый высокоуровневый API для потоковой передачи» . databricks.com . Проверено 19 октября 2017 г.
- ^ «Локальные и облачные хранилища данных: плюсы и минусы» . Управление данными поиска . Проверено 16 октября 2022 г.
- ^ Спаркс, Эван; Талвалкар, Амит (6 августа 2013 г.). «Spark Meetup: MLbase, распределенное машинное обучение с помощью Spark» . SlideShare.net . Встреча пользователей Spark, Сан-Франциско, Калифорния . Проверено 10 февраля 2014 г.
- ^ «MLlib | Apache Spark» . http://spark.apache.org . Проверено 18 января 2016 г.
- ^ Малак, Майкл (14 июня 2016 г.). «Нахождение изоморфизмов графов в GraphX и GraphFrames: обработка графов и база данных графов» . SlideShare.net . www.sparksummit.org . Проверено 11 июля 2016 г.
- ^ Малак, Майкл (1 июля 2016 г.). Spark GraphX в действии . Мэннинг. п. 89. ИСБН 9781617292521 .
Pregel и его младший братагрегатMessages() являются краеугольными камнями обработки графов в GraphX. ... алгоритмы, требующие большей гибкости для условия завершения, должны быть реализованы с использованиемагрегатаMessages()
- ^ Малак, Майкл (14 июня 2016 г.). «Нахождение изоморфизмов графов в GraphX и GraphFrames: обработка графов и база данных графов» . SlideShare.net . www.sparksummit.org . Проверено 11 июля 2016 г.
- ^ Гонсалес, Джозеф; Синь, Рейнольд; Дэйв, Анкур; Крэнкшоу, Дэниел; Франклин, Майкл; Стойка, Ион (октябрь 2014 г.). GraphX: обработка графов в среде распределенных потоков данных (PDF) . ОСДИ 2014.
- ^ «.NET для Apache Spark | Аналитика больших данных» . 15 октября 2019 г.
- ^ "Spark.jl" . Гитхаб . 14 октября 2021 г.
- ^ Перейти обратно: а б Кларк, Линдси. «Apache Spark ускоряет принятие решений на основе больших данных» . ComputerWeekly.com . Проверено 16 мая 2018 г.
- ^ «Фонд программного обеспечения Apache объявляет Apache™ Spark™ проектом высшего уровня» . apache.org . Фонд программного обеспечения Apache. 27 февраля 2014 года . Проверено 4 марта 2014 г.
- ^ Spark официально устанавливает новый рекорд крупномасштабной сортировки.
- ^ Деятельность по разработке Open HUB Spark
- ^ «Фонд программного обеспечения Apache объявляет Apache™ Spark™ проектом высшего уровня» . apache.org . Фонд программного обеспечения Apache. 27 февраля 2014 года . Проверено 4 марта 2014 г.
- ^ «Выпущен Spark 2.4.8» . http://spark.apache.org . Архивировано из оригинала 25 августа 2021 г.
- ^ «Выпущена Spark 3.0.3» . http://spark.apache.org .
- ^ «Выпущена Spark 3.1.3» . http://spark.apache.org . Архивировано из оригинала 18 июня 2022 г.
- ^ «Выпущена Spark 3.2.4» . http://spark.apache.org .
- ^ «Выпущена Spark 3.3.3» . http://spark.apache.org .
- ^ «Выпущена Spark 3.4.3» . http://spark.apache.org .
- ^ «Выпущена Spark 3.5.1» . http://spark.apache.org .
- ^ «Использование Scala 3 со Spark» . 47 градусов . Проверено 29 июля 2022 г.
- ^ «Информация о комитете Apache» .
- ^ «Политика версий» . http://spark.apache.org .
Внешние ссылки
[ редактировать ]- Проекты Apache Software Foundation
- Продукты больших данных
- Кластерные вычисления
- Программное обеспечение для интеллектуального анализа данных и машинного обучения
- Бесплатное программное обеспечение, написанное на Scala.
- Хадуп
- Java-платформа
- Программное обеспечение, использующее лицензию Apache
- Калифорнийский университет, Беркли