Автор оригинала: Chandan Singh.
Что такое Apache Spark?
Apache Spark -это механизм распределенной обработки данных в памяти, который используется для обработки и анализа больших наборов данных. Spark представляет простой интерфейс для пользователя, позволяющий выполнять распределенные вычисления на всех кластерах.
У Spark нет собственных файловых систем, поэтому для обработки данных она должна зависеть от систем хранения. Он может работать в HDFS или облачных файловых системах, таких как Amazon S3 и Azure BLOB .
Помимо облачных файловых систем, он также может работать с базами данных NoSQL, такими как Cassandra и MongoDB .
Задания Spark могут быть написаны на Java, Scala, Python, R и SQL. Он предоставляет готовые библиотеки для машинного обучения, обработки графиков, потоковой передачи и SQL-обработки данных. Мы подробно расскажем о каждой из этих библиотек позже в этой статье.
Движок был разработан в Калифорнийском университете, AMPLab в Беркли, и был передан в дар Apache Software Foundation в 2013 году.
Потребность в искре
Традиционным способом обработки данных в Hadoop является использование его платформы MapReduce . MapReduce требует большого использования диска, и поэтому обработка выполняется медленнее. По мере того как анализ данных становился все более распространенным, создатели почувствовали необходимость ускорить обработку, сократив использование диска во время выполнения заданий.
Apache Spark решает эту проблему, выполняя вычисления в основной памяти (ОЗУ) рабочих узлов и не сохраняет промежуточные результаты вычислений на диске.
Во-вторых, он фактически не загружает данные до тех пор, пока они не потребуются для вычислений. Он преобразует данный набор команд в Ориентированный ациклический граф ( DAG ) и затем выполняет его. Это предотвращает необходимость считывания данных с диска и обратной записи результатов каждого шага, как в случае с Hadoop MapReduce . В результате Spark утверждает, что обрабатывает данные в 100 РАЗ быстрее, чем соответствующее задание, используя MapReduce для заданий вычислений в памяти.
Архитектура Sparc
Кредит: Кредит:
Ядро Spark использует архитектуру master-slave. Программа драйвера запускается в главном узле и распределяет задачи Исполнителю, работающему на различных подчиненных узлах. Исполнитель работает на своих собственных отдельных JVM, которые выполняют назначенные им задачи в нескольких потоках.
У каждого исполнителя также есть связанный с ним кэш. Кэш может быть как в памяти, так и записан на диск на рабочем узле . Исполнители выполняют задачи и отправляют результат обратно Водителю .
Драйвер связывается с узлами в кластерах с помощью Менеджера кластеров , например, встроенного менеджера кластеров, Mesos , YARN и т. Д. Пакетные программы, которые мы пишем, выполняются в узле драйвера.
Простое Задание Spark С Использованием Java
Мы много обсуждали Spark и его архитектуру, поэтому теперь давайте рассмотрим простое задание Spark, которое подсчитывает сумму чисел, разделенных пробелами, из данного текстового файла:
32 23 45 67 2 5 7 9 12 45 68 73 83 24 1 12 27 51 34 22 14 31 ...
Мы начнем с импорта зависимостей для ядра Spark, которое содержит механизм обработки Spark. У него нет дополнительных требований, так как он может использовать локальную файловую систему для чтения файла данных и записи результатов:
org.apache.spark spark-core_2.10 2.2.3
С настройкой ядра давайте приступим к написанию нашей партии Spark!
public class CalculateFileSum { public static String SPACE_DELIMITER = " "; public static void main(String[] args) { SparkConf conf = new parkConf().setMaster("local[*]").setAppName("SparkFileSumApp"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDDinput = sc.textFile("numbers.txt"); JavaRDD numberStrings = input.flatMap(s -> Arrays.asList(s.split(SPACE_DELIMITER)).iterator()); JavaRDD validNumberString = numberStrings.filter(string -> !string.isEmpty()); JavaRDD numbers = validNumberString.map(numberString -> Integer.valueOf(numberString)); int finalSum = numbers.reduce((x,y) -> x+y); System.out.println("Final sum is: " + finalSum); sc.close(); } }
Запуск этого фрагмента кода должен привести к:
Final sum is: 687
Созданный нами объект JavaSparkContext
действует как соединение с кластером. Контекст Spark, который мы создали здесь, был выделен всем доступным локальным процессорам, следовательно, *
.
Самой базовой абстракцией в Spark является RDD
, что означает Устойчивые распределенные наборы данных . Он устойчив и распределен, так как данные реплицируются по всему кластеру и могут быть восстановлены в случае сбоя любого из узлов.
Еще одним преимуществом распространения данных является то, что они могут обрабатываться параллельно, что способствует горизонтальному масштабированию. Еще одной важной особенностью RDDS является то, что они являются неизменяемыми. Если мы применим какое-либо действие или преобразование к данному RDD, результатом будет другой набор RDD.
В этом примере мы прочитали слова из входного файла как RDD
s и преобразовали их в числа. Затем мы применили к ним функцию reduce
, чтобы суммировать значения каждого из RDDs перед отображением их на консоли.
Введение в библиотеки Spark
Spark предоставляет нам ряд встроенных библиотек, которые работают поверх ядра Spark.
Spark SQL
Spark SQL предоставляет SQL-подобный интерфейс для обработки структурированных данных. Когда пользователь выполняет SQL-запрос, внутренне запускается пакетное задание Spark SQL, которое обрабатывает RDDS в соответствии с запросом.
Преимущество этого API заключается в том, что те, кто знаком с СУБД в стиле запросов, легко переходят на Spark и пишут задания в Spark.
Поток искр
Spark Streaming подходит для приложений, которые работают с потоком данных в режиме реального времени, например, обрабатывают каналы Twitter.
Spark может интегрироваться с Apache Kafka и другими потоковыми инструментами для обеспечения отказоустойчивых и высокопроизводительных возможностей обработки потоковых данных.
Искра MLlib
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
MLlib сокращенно от Библиотека машинного обучения , которую предоставляет Spark. Она включает в себя общие алгоритмы обучения, такие как классификация, рекомендации, моделирование и т.д. которые используются в машинном обучении.
Эти алгоритмы могут быть использованы для обучения модели в соответствии с базовыми данными. Благодаря чрезвычайно быстрой обработке данных, поддерживаемой Spark, модели машинного обучения могут быть обучены за относительно короткий промежуток времени.
GraphX
Как следует из названия, GraphX – это API Spark для обработки графиков и выполнения параллельных вычислений.
Пользователь может создавать графики и выполнять такие операции, как объединение и преобразование графиков. Как и в случае с MLlib, Graphx поставляется со встроенными графическими алгоритмами для pagerank, подсчета треугольников и многого другого.
Вывод
Apache Spark является предпочтительной платформой благодаря своей высокой скорости обработки данных, простоте использования и отказоустойчивым функциям.
В этой статье мы на примере рассмотрели архитектуру Spark и в чем секрет ее молниеносной скорости обработки. Мы также ознакомились с популярными библиотеками Spark и их функциями.