Apache Spark

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Spark
Spark Logo
Тип аналіз даних, алгоритми машинного навчання
Автор(и) Матей Захарія
Розробник Apache Software Foundation, UC Berkeley
Стабільний випуск 1.6.1 (9 березня 2016; 564 дні тому )
Версії 1.2.1[1], 1.4.1[2], 1.4.0[3], 1.6.0[4], 1.5.2[5], 1.5.1[5], 1.5.0[6], 2.0.0[7], 2.0.1, 2.1.0[8], 2.1.1[9] і 2.2.0[10]
Репозиторій github.com/apache/spark
Платформа Віртуальна машина Java
Операційна система Linux, MAC OS, Windows
Написано на Scala, Java, Python, R
Стан розробки активний
Ліцензія Apache License 2.0
spark.apache.org

Apache Spark — високопродуктивний рушій для оброблення даних, що зберігаються в кластері Hadoop. У порівнянні з наданим у Hadoop механізмом MapReduce, Spark забезпечує у 100 разів більшу продуктивність при обробленні даних в пам'яті й 10 разів при розміщенні даних на дисках.[11] Рушій може виконуватися на вузлах кластера Hadoop як за допомогою Hadoop YARN, так і у відокремленому режимі. Підтримується оброблення даних у сховищах HDFS, HBase, Cassandra, Hive та будь-якому форматі введення Hadoop (InputFormat).

Spark може використовуватися як у типових сценаріях оброблення даних, схожих на MapReduce, так і для реалізації специфічних методів, таких як потокове оброблення, SQL, інтерактивні та аналітичні запити, рішення задач машинного навчання і робота з графами. Програми для оброблення даних можуть створюватися на мовах Scala, Java, Python та R.

Spark після перебування в інкубаторі став первинним проектом Apache Software Foundation від лютого 2014.

З компаній, котрі використовують Spark, відзначаються Alibaba, Cloudera, Databricks, IBM, Intel, Yahoo, Cisco Systems.

У жовтні 2014 року Apache Spark встановив світовий рекорд при сортуванні 100 терабайт даних.[12]

Згідно опитування O'Reilly у 2015 році 17% дослідників даних використовують Apache Spark.[13]

Опис[ред.ред. код]

Застосунок Spark складається з процесу-драйвера (англ. driver process) та багатьох процесів виконавців (англ. executor processes)[14].

Драйвер є серцем застосунку Spark, і виконує наступні функції:

  1. Зберігає та обробляє інформацію про стан застосунку
  2. Відповідає на запити користувацьких програм
  3. Аналізує та розподіляє завдання між виконавцями та порядок їх виконання.

Виконавці натомість виконують завдання та звітують про їх виконання і свій стан драйверу.

Так як драйвер і виконавці є звичайними процесами, Spark може працювати в псевдо-розподіленому локальному режимі (англ. local mode), в якому всі вони запускаються на одному комп'ютері з одним виконавцем на кожне ядро процесора і робота кластера лише емулюється. Це корисно для розробки і тестування. Зазвичай цей режим використовуюється для розробки або тестування, коли розподілене зберігання не потрібне і натомість використовується локальна файлова система.

Apache Spark потребує для розгортання кластера менеджера кластера[en] ', який контролює фізичні машини і виділяє ресурси та розподілену систему зберігання[en]. В Spark менеджером може працювати як вбудований менеджер Spark (англ. Spark standalone cluster manager)[15], так і YARN або Apache Mesos.[16] Для розподіленого зберігання, Spark може з'єднуватись з найрізноманітнішими системами, включаючи Hadoop Distributed File System,[17] MapR File System,[18] Cassandra,[19] OpenStack Swift, Amazon S3, Kudu, або реалізацію оригінального рішення.

Spark дозволяє писати запити надаючи API наступними мовами програмування: Scala, Python, Java, SQL та R[14].

  • $SPARK_HOME/bin/spark-shell запускає REPL на Scala
  • $SPARK_HOME/bin/pyspark запускає REPL на Python

API до процесу драйвера називається сесією Spark (англ. Spark Session) і доступне як змінна spark в оболонках для Scala та Python[14].

DataFrame[ред.ред. код]

Основна структура даних з якою працює Spark - DataFrame. Вона містить таблицю яка складається з рядків та колонок. Список колонок та їхніх типів називають схемою (яку можна подивитись викликавши метод df.printSchema()). Аналогічні структури даних є в мові R та бібліотеці pandas, але в Spark він відрізняється тим що є розподіленим на кілька розділів (англ. partitions). Розділ - це набір рядків DataFrame на одній фізичній машині кластеру[14].

DataFrame в Spark - незмінні, але до нього можна застосувати перетворення (англ. transformations) щоб утворити новий DataFrame. Наприклад:

evenRows = myData.where("number % 2 = 0") # утворюємо DataFrame evenRows з датафрейму myData

Перетворення ліниві, і не виконуються, а лише додаються до плану обчислень доти, доки користувач не попросить про якусь дію (англ. action). Дія може вивести дані в консоль, файл чи базу даних, або зібрати їх в об'єкти мови якою писали запит. Приклад дії - evenRows.count() - підрахунок кількості рядків в DataFrame[14].

Дія запускає завдання (англ. job), яке виконує всі необхідні перетворення та дію згідно оптимізованого плану обчислень. Процес виконання завдання можна моніторити з веб-інтерфейсу користувача Spark, який знаходиться за адресою http://localhost:4040/ в локальному режимі, або на вузлі кластера на якому запущений драйвер.

SparkSQL[ред.ред. код]

Крім методів об'єкта DataFrame з даними можна працювати за допомогою Spark SQL[14]. Для цього Spark може створити з DataFrame розріз даних (віртуальну таблицю). Це робиться викликом:

myDataFrame.createOrReplaceTempView("назва_таблиці")

Після чого можна виконати запит в REPL, через метод sql об'єкта сесії:

spark.sql("SELECT ... FROM назва_таблиці ...")

RDD[ред.ред. код]

API Apache Spark зосереджено навколо структури даних, яка називається пружні розподілені набори даних (англ. resilient distributed dataset, RDD), відмовостійка мультимножина елементів даних яку можна лише читати, розподілена понад кластером машин.[20] Вона була розроблена у відповідь на обмеження парадигми програмування MapReduce, яка нав'язує певну лінійну структуру потоку даних[en] для розподіленої програми: програми MapReduce читають вхідні дані з диска, застосовують до всіх даних map()[en], згортають[en] результати застосування map() і зберігають результат на диску. RDDs в Spark функціонують як working set[en] для розподілених програм, який надає обмежену (навмисне) форму розподіленої спільної пам'яті.[21]

Доступність RDD підтримує реалізацію як ітеративних алгоритмів, які звертаються до даних багато разів в циклі, так і інтерактивного розвідувального аналізу, тобто повторювані запити до даних як у СКБД. латентність[en] таких застосунків (порівняно з реалізаціями на MapReduce, які типові для стеку Apache Hadoop) може бути меншою на кілька порядків.[20][22] До класу ітеративних алгоритмів входять тренувальні алгоритми систем машинного навчання, які сформували початкову спонуку для розробки Apache Spark.[23]

Інфраструктура[ред.ред. код]

Сайт Spark Packages[24] станом на вересень 2017-го містить більш ніж 360 пакетів які розширюють функціональність Spark дозволяючи йому записувати та читати дані з різних джерел і форматів, містять реалізації різних алгоритмів машинного навчання та роботи з графами та інше.

Історія[ред.ред. код]

Проект Spark був початий Матеєм Захарією AMPLab уіверситету Берклі в 2009, а його код відкритий в 2010 під ліцензією BSD.

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

В листопаді 2014, компанія Databricks заснована Матеєм, встановила за допомогою Spark новий світовий рекорд з сортування великих обсягів даних.[26]

Spark мав понад 1000 учасників проекту в 2015,[27] що зробило його одним з найактивніших проектів в Apache Software Foundation[28] і одним з найактивніших проектів великих даних з відкритим кодом.

Зважаючи на популярність платворми, такі платні програми як General Assembly[en] та безкоштовні товариства, такі як The Data Incubator[en] почали пропонувати спеціалізовані навчальні курси[29]

Версія Дата першого релізу Остання мінорна версія Дата релізу
Old version, no longer supported: 0.5 2012-06-12 0.5.1 2012-10-07
Old version, no longer supported: 0.6 2012-10-14 0.6.2 2013-02-07[30]
Old version, no longer supported: 0.7 2013-02-27 0.7.3 2013-07-16
Old version, no longer supported: 0.8 2013-09-25 0.8.1 2013-12-19
Old version, no longer supported: 0.9 2014-02-02 0.9.2 2014-07-23
Old version, no longer supported: 1.0 2014-05-30 1.0.2 2014-08-05
Old version, no longer supported: 1.1 2014-09-11 1.1.1 2014-11-26
Old version, no longer supported: 1.2 2014-12-18 1.2.2 2015-04-17
Old version, no longer supported: 1.3 2015-03-13 1.3.1 2015-04-17
Old version, no longer supported: 1.4 2015-06-11 1.4.1 2015-07-15
Old version, no longer supported: 1.5 2015-09-09 1.5.2 2015-11-09
Older version, yet still supported: 1.6 2016-01-04 1.6.3 2016-11-07
Older version, yet still supported: 2.0 2016-07-26 2.0.2 2016-11-14
Older version, yet still supported: 2.1 2016-12-28 2.1.1 2017-05-02
Current stable version: 2.2 2017-07-11 2.2.0 2017-07-11
Легенда:
Стара версія
Стара версія, все ще підтримується
Остання версія
Остання бета-версія
Майбутній реліз

Виноски[ред.ред. код]

  1. https://spark.apache.org/news/spark-1-2-1-released.html
  2. http://spark.apache.org/releases/spark-release-1-4-1.html
  3. http://spark.apache.org/news/spark-1-4-0-released.html
  4. https://spark.apache.org/news/spark-1-6-0-released.html
  5. а б https://spark.apache.org/news/
  6. https://spark.apache.org/releases/spark-release-1-5-0.html
  7. https://spark.apache.org/news/spark-2-0-0-released.html
  8. https://spark.apache.org/news/spark-2-1-0-released.html
  9. https://spark.apache.org/news/spark-2-1-1-released.html
  10. https://spark.apache.org/news/spark-2-2-0-released.html
  11. Spark получил статус первичного проекта Apache // opennet.ru 27.02.2014
  12. World record set for 100 TB sort by open source and public cloud team
  13. 2015 Data Science Salary Survey
  14. а б в г д е Zaharia та Chambers, 2017
  15. Spark Standalone Mode - Spark 2.2.0 Documentation. Процитовано 2017-09-11. 
  16. Cluster Mode Overview - Spark 1.2.0 Documentation - Cluster Manager Types. apache.org. Apache Foundation. 2014-12-18. Процитовано 2015-01-18. 
  17. Figure showing Spark in relation to other open-source Software projects including Hadoop
  18. MapR ecosystem support matrix
  19. Doan, DuyHai (2014-09-10). Re: cassandra + spark / pyspark. Cassandra User mailing list. Процитовано 2014-11-21. 
  20. а б Zaharia, Matei; Chowdhury, Mosharaf; Franklin, Michael J.; Shenker, Scott; Stoica, Ion. Spark: Cluster Computing with Working Sets USENIX Workshop on Hot Topics in Cloud Computing (HotCloud). 
  21. Zaharia, Matei; Chowdhury, Mosharaf; Das, Tathagata; Dave, Ankur; Ma,, Justin; McCauley, Murphy; J., Michael; Shenker, Scott та ін. Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing USENIX Symp. Networked Systems Design and Implementation. 
  22. Xin, Reynold; Rosen, Josh; Zaharia, Matei; Franklin, Michael; Shenker, Scott; Stoica, Ion (June 2013). Shark: SQL and Rich Analytics at Scale SIGMOD 2013. 
  23. Harris, Derrick (28 June 2014). 4 reasons why Spark could jolt Hadoop into hyperdrive. Gigaom. 
  24. https://spark-packages.org/
  25. The Apache Software Foundation Announces Apache&#8482 Spark&#8482 as a Top-Level Project. apache.org. Apache Software Foundation. 27 February 2014. Процитовано 4 March 2014. 
  26. Spark officially sets a new record in large-scale sorting
  27. Open HUB Spark development activity
  28. The Apache Software Foundation Announces Apache&#8482 Spark&#8482 as a Top-Level Project. apache.org. Apache Software Foundation. 27 February 2014. Процитовано 4 March 2014. 
  29. NY gets new bootcamp for data scientists: It’s free, but harder to get into than Harvard. Venture Beat. Процитовано 2016-02-21. 
  30. Spark News. apache.org. Процитовано 2017-03-30. 

Література[ред.ред. код]

Посилання[ред.ред. код]