Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Обзор [ править ]

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

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

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] Cassandra , [14] OpenStack Swift , Amazon S3 , Куда , файловая система Luster , [15] или пользовательское решение может быть реализовано. Spark также поддерживает псевдораспределенный локальный режим, обычно используемый только для целей разработки или тестирования, когда распределенное хранилище не требуется, и вместо него может использоваться локальная файловая система; в таком сценарии Spark запускается на одной машине с одним исполнителем на каждое ядро процессора .

Spark Core [ править ]

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

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

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

val  conf  =  новый  SparkConf (). setAppName ( "wiki_test" )  // создаем объект конфигурации искры val  sc  =  new  SparkContext ( conf )  // Создаем контекст искры val  data  =  sc . textFile ( "/ path / to / somedir" )  // Чтение файлов из "somedir" в RDD пар (имя файла, содержимое). val  tokens  =  данные . flatMap ( _ . split ( "" )) // Разбиваем каждый файл на список токенов (слов). val  wordFreq  =  токены . карта (( _ ,  1 )). reduceByKey ( _  +  _ )  // Добавляем счетчик по единице к каждому токену, затем суммируем счетчики для каждого типа слова. wordFreq . sortBy ( s  =>  - s . _2 ). карта ( х  =>  ( х . _2 ,  х . _1 )). верх ( 10 ) // Получаем 10 первых слов. Поменяйте местами слова и подсчитайте для сортировки по количеству

Spark SQL [ править ]

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

импортировать  org.apache.spark.sql.SparkSessionval  url  =  "jdbc: mysql: // yourIP: yourPort / test? user = yourUsername; password = yourPassword"  // URL-адрес вашего сервера базы данных. val  spark  =  SparkSession . строитель (). getOrCreate ()  // Создаем объект сеанса Sparkval  df  =  искра  . читать  . формат ( "jdbc" )  . вариант ( "URL" ,  URL )  . option ( "dbtable" ,  "люди" )  . load ()df . printSchema ()  // Смотрит схему этого DataFrame. val  countsByAge  =  df . groupBy ( "возраст" ). count ()  // Считает людей по возрасту// или, альтернативно, через SQL: //df.createOrReplaceTempView("people ") // val countsByAge = spark.sql (" ВЫБРАТЬ возраст, количество (*) ИЗ людей ГРУППА ПО возрасту ")

Spark Streaming [ править ]

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 можно развернуть в традиционном локальном центре обработки данных, а также в облаке .

Библиотека машинного обучения MLlib [ править ]

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

  • сводная статистика , корреляции , стратифицированная выборка , проверка гипотез , генерация случайных данных [25]
  • классификация и регрессия : опорные векторные машины , логистическая регрессия , линейная регрессия , наивная байесовская классификация , дерево решений , случайный лес , дерево с градиентным усилением
  • методы совместной фильтрации , включая альтернативные методы наименьших квадратов (ALS)
  • методы кластерного анализа, включая k-средних и скрытое распределение Дирихле (LDA)
  • методы уменьшения размерности, такие как разложение по сингулярным значениям (SVD) и анализ главных компонентов (PCA)
  • извлечения признаков и преобразования функции
  • алгоритмы оптимизации , такие как стохастический градиентный спуск , BFGS с ограниченной памятью (L-BFGS)

GraphX [ править ]

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

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

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

Языковая поддержка [ править ]

Apache Spark имеет встроенную поддержку Scala, Java, R и Python со сторонней поддержкой языков .net, [31] Julia, [32] и других.

История [ править ]

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

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

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

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

Разработчики [ править ]

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

См. Также [ править ]

  • Список API / фреймворков параллельного и параллельного программирования

Примечания [ править ]

  1. ^ Вызывался SchemaRDDs до Spark 1.3 [18]

Ссылки [ править ]

  1. ^ "Spark Release 2.0.0" . MLlib в R: SparkR теперь предлагает API MLlib [..] Python: PySpark теперь предлагает гораздо больше алгоритмов MLlib "
  2. ^ a b c d Захария, Матей; Чоудхури, Мошараф; Франклин, Майкл Дж .; Шенкер, Скотт; Стойка, Ион. Spark: кластерные вычисления с рабочими наборами (PDF) . Семинар USENIX по актуальным темам облачных вычислений (HotCloud).
  3. ^ «Spark 2.2.0 Быстрый старт» . apache.org . 2017-07-11 . Проверено 19 октября 2017 . мы настоятельно рекомендуем вам перейти на использование набора данных, который имеет лучшую производительность, чем RDD
  4. ^ "Список устаревших версий Spark 2.2.0" . apache.org . 2017-07-11 . Проверено 10 октября 2017 .
  5. ^ Дамджи, Джулс (2016-07-14). «Рассказ о трех API-интерфейсах Apache Spark: RDD, DataFrames и Datasets: когда их использовать и почему» . databricks.com . Проверено 19 октября 2017 .
  6. ^ Чемберс, Билл (2017-08-10). «12» . Spark: полное руководство . O'Reilly Media . практически весь код Spark, который вы запускаете, где DataFrames или Datasets, компилируется в RDD
  7. ^ «Что такое Apache Spark? Учебное руководство по Spark для начинающих» . janbasktraining.com . 2018-04-13 . Проверено 13 апреля 2018 .
  8. ^ Захария, Матей; Чоудхури, Мошараф; Дас, Татхагата; Дэйв, Анкур; Ма, Джастин; Макколи, Мерфи; J., Майкл; Шенкер, Скотт; Стойка, Ион (2010). Устойчивые распределенные наборы данных: отказоустойчивая абстракция для кластерных вычислений в памяти (PDF) . USENIX Symp. Проектирование и внедрение сетевых систем.
  9. ^ Синь, Рейнольд; Розен, Джош; Захария, Матей; Франклин, Майкл; Шенкер, Скотт; Стойка, Ион (июнь 2013 г.). «Акула: SQL и обширная аналитика» (PDF) . arXiv : 1211.6176 . Bibcode : 2012arXiv1211.6176X . Cite journal requires |journal= (help)
  10. ^ Харрис, Деррик (28 июня 2014 г.). «4 причины, по которым Spark смог превратить Hadoop в гипердвигатель» . Гигаом .
  11. ^ «Обзор режима кластера - Документация Spark 2.4.0 - Типы диспетчера кластеров» . apache.org . Фонд Apache. 2019-07-09 . Проверено 9 июля 2019 .
  12. ^ Рисунок, показывающий Spark по отношению к другим программным проектам с открытым исходным кодом, включая Hadoop.
  13. ^ Матрица поддержки экосистемы MapR
  14. ^ Доан, DuyHai (2014-09-10). "Re: cassandra + spark / pyspark" . Пользователь Кассандры (список рассылки) . Проверено 21 ноября 2014 .
  15. ^ Ван, Яньдун; Голдстоун, Робин; Ю, Вэйкуань; Ван, Тэн (май 2014 г.). «Характеристика и оптимизация резидентного MapReduce в системах HPC». 28-й Международный симпозиум по параллельной и распределенной обработке, 2014 г., IEEE . IEEE. С. 799–808. DOI : 10.1109 / IPDPS.2014.87 . ISBN 978-1-4799-3800-1. S2CID  11157612 .
  16. ^ a b dotnet / spark , .NET Platform, 14 сентября 2020 г. , получено 14 сентября 2020 г.
  17. ^ «GitHub - DFDX / Spark.jl: привязка Julia для Apache Spark» . 2019-05-24.
  18. ^ "Spark Release 1.3.0 | Apache Spark" .
  19. ^ «Применение лямбда-архитектуры с помощью Spark, Kafka и Cassandra | Pluralsight» . www.pluralsight.com . Проверено 20 ноября 2016 .
  20. Шапира, Гвен (29 августа 2014 г.). «Построение лямбда-архитектуры с помощью Spark Streaming» . cloudera.com . Cloudera. Архивировано из оригинального 14 июня 2016 года . Дата обращения 17 июня 2016 . повторно использовать те же агрегаты, которые мы написали для нашего пакетного приложения, в потоке данных в реальном времени
  21. ^ Чинтапалли, Санкет; Дагит, Дерек; Эванс, Бобби; Фаривар, Реза; Грейвс, Томас; Холдербо, Марк; Лю, Чжо; Нусбаум, Кайл; Патил, Кишоркумар; Пэн, Боян Джерри; Поулски, Пол (май 2016 г.). «Тестирование механизмов потоковых вычислений: Storm, Flink и Spark Streaming». 2016 IEEE International Параллельная и распределенная обработка Symposium Мастерские (IPDPSW) . IEEE. С. 1789–1792. DOI : 10.1109 / IPDPSW.2016.138 . ISBN 978-1-5090-3682-0. S2CID  2180634 .
  22. ^ Kharbanda, Arush (17 марта 2015). «Получение данных в Spark Streaming» . sigmoid.com . Sigmoid (Саннивейл, штат Калифорния, производящая ИТ-компания). Архивировано из оригинального 15 августа 2016 года . Дата обращения 7 июля 2016 .
  23. ^ Захария, Матей (2016-07-28). «Структурированная потоковая передача в Apache Spark: новый высокоуровневый API для потоковой передачи» . databricks.com . Проверено 19 октября 2017 .
  24. ^ Спаркс, Эван; Талвалкар, Амит (06.08.2013). «Встреча Spark: MLbase, распределенное машинное обучение с помощью Spark» . slideshare.net . Встреча пользователей Spark, Сан-Франциско, Калифорния . Проверено 10 февраля 2014 .
  25. ^ "MLlib | Apache Spark" . spark.apache.org . Проверено 18 января 2016 .
  26. Малак, Майкл (14 июня 2016 г.). «Поиск изоморфизмов графов в GraphX ​​и GraphFrames: обработка графов против базы данных графов» . slideshare.net . sparksummit.org . Проверено 11 июля +2016 .
  27. Малак, Майкл (1 июля 2016 г.). Spark GraphX ​​в действии . Мэннинг. п. 89. ISBN 9781617292521. Pregel и его младший брат aggregateMessages () - краеугольные камни обработки графов в GraphX. ... алгоритмы, требующие большей гибкости для условия завершения, должны быть реализованы с использованием aggregateMessages ()
  28. Малак, Майкл (14 июня 2016 г.). «Поиск изоморфизмов графов в GraphX ​​и GraphFrames: обработка графов против базы данных графов» . slideshare.net . sparksummit.org . Проверено 11 июля +2016 .
  29. Малак, Майкл (1 июля 2016 г.). Spark GraphX ​​в действии . Мэннинг. п. 9. ISBN 9781617292521. Giraph может замедлить отображение карты / уменьшения Hadoop.
  30. ^ Гонсалес, Джозеф; Синь, Рейнольд; Дэйв, Анкур; Crankshaw, Дэниэл; Франклин, Майкл; Стойка, Ион (октябрь 2014 г.). «GraphX: обработка графиков в среде распределенного потока данных» (PDF) . Cite journal requires |journal= (help)
  31. ^ [1]
  32. ^ [2]
  33. ^ a b Кларк, Линдси. «Apache Spark ускоряет принятие решений в отношении больших данных» . ComputerWeekly.com . Проверено 16 мая 2018 .
  34. ^ "Apache Software Foundation объявляет Apache & # 8482 Spark & ​​# 8482 как проект верхнего уровня" . apache.org . Фонд программного обеспечения Apache. 27 февраля 2014 . Проверено 4 марта 2014 года .
  35. ^ Spark официально устанавливает новый рекорд крупномасштабной сортировки
  36. ^ Деятельность по разработке Open HUB Spark
  37. ^ "Apache Software Foundation объявляет Apache & # 8482 Spark & ​​# 8482 как проект верхнего уровня" . apache.org . Фонд программного обеспечения Apache. 27 февраля 2014 . Проверено 4 марта 2014 года .
  38. ^ "Spark News" . apache.org .
  39. ^ "Spark News" . apache.org .
  40. ^ https://projects.apache.org/committee.html?spark

Внешние ссылки [ править ]

  • Официальный веб-сайт