что такое apache spark

Apache Spark: что там под капотом?

Вступление

Небольшая предыстория:

Spark — проект лаборатории UC Berkeley, который зародился примерно в 2009г. Основатели Спарка — известные ученые из области баз данных, и по философии своей Spark в каком-то роде ответ на MapReduce. Сейчас Spark находится под «крышей» Apache, но идеологи и основные разработчики — те же люди.

Spoiler: Spark в 2-х словах

Spark можно описать одной фразой так — это внутренности движка массивно-параллельной СУБД. То есть Spark не продвигает свое хранилище, а живет сверх других (HDFS — распределенная файловая система Hadoop File System, HBase, JDBC, Cassandra,… ). Правда стоит сразу отметить проект IndexedRDD — key/value хранилище для Spark, которое наверное скоро будет интегрировано в проект.Также Spark не заботится о транзакциях, но в остальном это именно движок MPP DBMS.

RDD — основная концепция Spark

Ключ к пониманию Spark — это RDD: Resilient Distributed Dataset. По сути это надежная распределенная таблица (на самом деле RDD содержит произвольную коллекцию, но удобнее всего работать с кортежами, как в реляционной таблице). RDD может быть полностью виртуальной и просто знать, как она породилась, чтобы, например, в случае сбоя узла, восстановиться. А может быть и материализована — распределенно, в памяти или на диске (или в памяти с вытеснением на диск). Также, внутри, RDD разбита на партиции — это минимальный объем RDD, который будет обработан каждым рабочим узлом.

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

Давайте рассмотрим такое простое приложение в деталях (напишем его на Scala — вот и повод изучить этот модный язык):

Пример Spark приложения (не все включено, например include)

Мы отдельно разберем, что происходит на каждом шаге.

А что же там происходит?

Теперь пробежимся по этой программе и посмотрим что происходит.

Ну во-первых программа запускается на мастере кластера, и прежде чем пойдет какая-нибудь параллельная обработка данные есть возможность что-то поделать спокойно в одном потоке. Далее — как уже наверное заметно — каждая операция над RDD создает другой RDD (кроме saveAsTextFile). При этом RDD все создаются лениво, только когда мы просим или записать в файл, или например выгрузить в память на мастер — начинается выполнение. То есть выполнение происходит как в плане запроса, конвеером, где элемент конвеера — это партиция.

Что происходит с самой первой RDD, которую мы сделали из файла HDFS? Spark хорошо синтегрирован с Hadoop, поэтому на каждом рабочем узле будет закачиваться свое подмножество данных, и закачиваться будет по партициям (которые в случае HDFS совпадают с блоками). То есть все узлы закачали первый блок, и пошло выполнение дальше по плану.

После чтения с диска у нас map — он выполняется тривиально на каждом рабочем узле.

Дальше идет groupBy. Это уже не простая конвеерная операция, а настоящая распределенная группировка. По хорошему, лучше этот оператор избегать, так как пока он реализован не слишком умно — плохо отслеживает локальность данных и по производительности будет сравним с распределенной сортировкой. Ну это уже информация к размышлению.

Давайте задумаемся о состоянии дел в момент выполнения groupBy. Все RDD до этого были конвеерными, то есть они ничего нигде не сохраняли. В случае сбоя, они опять бы вытащили недостающие данные из HDFS и пропустили через конвеер. Но groupBy нарушает конвеерность и в результате мы получим закэшированный RDD. В случае потери теперь мы вынуждены будем переделать все RDD до groupBy полностью.

Чтобы избежать ситуации, когда из-за сбоев в сложном приложении для Spark приходится пересчитывать весь конвеер, Spark позволяет пользователю контролировать кэширование оператором persist. Он умеет кэшировать в память (в этом случае идет пересчет при потере данных в памяти — она может случится при переполнении кэша), на диск (не всегда достаточно быстро), или в память с выбросом на диск в случае переполнения кэша.

После, у нас опять map и запись в HDFS.

Ну вот, теперь более менее понятно что происходит внутри Spark на простом уровне.

А как же подробности?

Например хочется знать как именно работает операция groupBy. Или операция reduceByKey, и почему она намного эфективнее, чем groupBy. Или как работает join и leftOuterJoin. К сожалению большинство подробностей пока легче всего узнать только из исходников Spark или задав вопрос на их mailing list (кстати, рекомендую подписаться на него, если будете что-то серьезное или нестандартное делать на Spark).

Еще хуже с понимаем, что творится в различных коннекторах к Spark. И насколько ими вообще можно пользоваться. Например нам на время пришлось отказаться от идеи интегрироваться с Cassandra из-за их непонятной поддержки коннектора к Spark. Но надежда есть что документация качественная в скором будущем появится.

Источник

Что такое Apache Spark?

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

Типичные сценарии обработки больших данных

Следует предусмотреть архитектуру для работы с большими данными, если вам нужно хранить и обрабатывать большие объемы данных, преобразовывать неструктурированные или обрабатывать потоковые данные. Spark предоставляет механизм распределенной обработки широкого назначения, который позволяет реализовать несколько сценариев работы с большими данными.

Извлечение, преобразование и загрузка (ETL)

Процесс извлечения, преобразования и загрузки (ETL) включает сбор данных из одного или нескольких источников, изменение этих данных и их перемещение в новое хранилище. Есть несколько способов преобразовать данные, например:

Обработка потоков данных в реальном времени

Данными потоковой передачи (реального времени) называют данные, которые находятся в движении. К ним относятся, например, данные телеметрии от устройств Интернета вещей, веб-журналы и сведения о посещении ресурсов. Обработка данных реального времени позволяет получить полезные сведения (например, с помощью геопространственного анализа, удаленного мониторинга и обнаружения аномалий). Как и в случае с реляционными данными, перед перемещением потоковых данных в приемник вы можете их фильтровать, объединять и подготавливать. Apache Spark поддерживает обработку потока данных реального времени с помощью потоковой передачи Spark.

Пакетная обработка

Пакетная обработка — это обработка неактивных больших данных. Вы можете фильтровать, объединять и подготавливать очень большие наборы данных с помощью длительно выполняющихся параллельных заданий.

Машинное обучение с использованием MLlib

Машинное обучение позволяет выполнять расширенные аналитические задачи. Ваш компьютер может использовать существующие данные для прогнозирования реакции, результатов и тенденций. Библиотека машинного обучения MLlib из Apache Spark содержит несколько алгоритмов машинного обучения и служебных программ.

Обработка графов с помощью GraphX

Граф — это коллекция узлов, которые соединяются ребрами. Вы можете использовать базу данных графов для иерархических или взаимосвязанных данных. Такие данные можно обрабатывать с помощью API GraphX в Apache Spark.

Обработка SQL и структурированных данных с помощью Spark SQL

Для работы со структурированными (форматированными) данными в приложении Spark можно использовать SQL-запросы с помощью Spark SQL.

Архитектура Apache Spark

Для Apache Spark при использовании архитектуры «основной-рабочий», предусмотрено три основных компонента: драйвер, исполнители и диспетчер кластера.

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Драйвер

Драйвер состоит из пользовательской программы, например консольного приложения C#, и сеанса Spark. Сеанс Spark принимает программу и делит ее на небольшие задачи, которые обрабатываются исполнителями.

Исполнители

Каждый исполнитель (рабочий узел) получает от драйвера задачу и выполняет ее. Исполнители находятся в сущности, которая называется кластером.

Диспетчер кластера

Диспетчер кластера взаимодействует с драйвером и исполнителями, выполняя следующие задачи:

Поддержка языков

Apache Spark поддерживает следующие языки программирования:

API-интерфейсы Spark

Apache Spark поддерживает следующие API:

Дальнейшие действия

Источник

Apache Spark: гайд для новичков

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Mar 13, 2020 · 8 min read

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Что такое Apache Spark?

Специалисты компании Databricks, основанной создателями Spark, собрали лучшее о функционале Apache Spark в своей книге Gentle Intro to Apache Spark ( очень рекомендую прочитать):

“Apache Spark — это целостная вычислительная система с набором библиотек для п араллельной обработки данных на кластерах компьютеров. На данный момент Spark считается самым активно разрабатываемым средством с открытым кодом для решения подобных задач, что позволяет ему быть полезным инструментом для любого разработчика или исследователя-специалиста, заинтересованного в больших данных. Spark поддерживает множество широко используемых языков программирования (Python, Java, Scala и R), а также библиотеки для различных задач, начиная от SQL и заканчивая стримингом и машинным обучением, а запустить его можно как с ноутбука, так и с кластера, состоящего из тысячи серверов. Благодаря этому Apache Spark и является удобной системой для начала самостоятельной работы, перетекающей в обработку больших данных в невероятно огромных масштабах.”

Что такое большие данные?

Посмотрим-ка на популярное определение больших данных по Гартнеру. Это поможет разобраться в том, как Spark способен решить множество интересных задач, которые связаны с работой с большими данными в реальном времени:

“Большие данные — это информационные активы, которые характеризуются большим объёмом, высокой скоростью и/или многообразием, а также требуют экономически эффективных инновационных форм обработки информации, что приводит к усиленному пониманию, улучшению принятия решений и автоматизации процессов.”

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Заметка: Ключевой вывод — слово “большие” в больших данных относится не только к объёму. Вы не просто получаете много данных, они поступают в реальном времени очень быстро и в различных комплексных форматах, а ещё — из большого многообразия источников. Вот откуда появились 3-V больших данных: Volume (Объём), Velocity (Скорость), Variety (Многообразие).

Причины использовать Spark

Основываясь на самостоятельном предварительном исследовании этого вопроса, я пришёл к выводу, что у Apache Spark есть три главных компонента, которые делают его лидером в эффективной работе с большими данными, а это мотивирует многие крупные компании работать с большими наборами неструктурированных данных, чтобы Apache Spark входил в их технологический стек.

Apache Spark или Hadoop MapReduce…Что вам подходит больше?

Если отвечать коротко, то выбор зависит от конкретных потребностей вашего бизнеса, естественно. Подытоживая свои исследования, скажу, что Spark выбирают в 7-ми из 10-ти случаев. Линейная обработка огромных датасетов — преимущество Hadoop MapReduce. Ну а Spark знаменит своей быстрой производительностью, итеративной обработкой, аналитикой в режиме реального времени, обработкой графов, машинным обучением и это ещё не всё.

Хорошие новости в том, что Spark полностью совместим с экосистемой Hadoop и работает замечательно с Hadoop Distributed File System (HDFS — Распределённая файловая система Hadoop), а также с Apache Hive и другими похожими системами. Так что, когда объёмы данных слишком огромные для того, чтобы Spark мог удержать их в памяти, Hadoop может помочь преодолеть это затруднение при помощи возможностей его файловой системы. Привожу ниже пример того, как эти две системы могут работать вместе:

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Это изображение наглядно показывает, как Spark использует в работе лучшее от Hadoop: HDFS для чтения и хранения данных, MapReduce — для дополнительной обработки и YARN — для распределения ресурсов.

Дальше я пробую сосредоточиться на множестве преимуществ Spark перед Hadoop MapReduce. Для этого я сделаю краткое поверхностное сравнение.

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Скорость

Просто пользоваться

Обработка больших наборов данных

Функциональность

Apache Spark — неизменный победитель в этой категории. Ниже я даю список основных задач по анализу больших данных, в которых Spark опережает Hadoop по производительности:

Машинное обучение. В Spark есть MLlib — встроенная библиотека машинного обучения, а вот Hadoop нужна третья сторона для такого же функционала. MLlib имеет алгоритмы “out-of-the-box” (возможность подключения устройства сразу после того, как его достали из коробки, без необходимости устанавливать дополнительное ПО, драйверы и т.д.), которые также реализуются в памяти.

А вот и визуальный итог множества возможностей Spark и его совместимости с другими инструментами обработки больших данных и языками программирования:

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Заключение

Вместе со всем этим массовым распространением больших данных и экспоненциально растущей скоростью вычислительных мощностей инструменты вроде Apache Spark и других программ, анализирующих большие данные, скоро будут незаменимы в работе исследователей данных и быстро станут стандартом в индустрии реализации аналитики больших данных и решении сложных бизнес-задач в реальном времени.

Для тех, кому интересно погрузиться глубоко в технологию, которая стоит за всеми этими внешними функциями, почитайте книгу Databricks — “ A Gentle Intro to Apache Spark” или “ Big Data Analytics on Apache Spark”.

Источник

Spark

Описание термина: Apache Spark или просто Spark — это фреймворк (ПО, объединяющее готовые компоненты большого программного проекта), который используют для параллельной обработки неструктурированных или слабоструктурированных данных.

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

Зачем нужен Spark

Области использования Spark — это Big Data и технологии машинного обучения, поэтому им пользуются специалисты, работающие с данными, например дата-инженеры, дата-сайентисты и аналитики данных.

Примеры задач, которые можно решить с помощью Spark:

Spark поддерживает языки программирования Scala, Java, Python, R и SQL. Сначала популярными были только первые два, так как на Scala фреймворк был написан, а на Java позже была дописана часть кода. С ростом Python-сообщества этим языком тоже стали пользоваться активнее, правда обновления и новые фичи в первую очередь доступны для Scala-разработчиков. Реже всего для работы со Spark используют язык R.

Data Scientist с нуля

Всего за год вы получите перспективную профессию, пополните портфолио рекомендательной системой и нейросетями, примете участие в соревнованиях на Kaggle и в хакатонах.

В структуру Spark входят ядро для обработки данных и набор расширений:

Как работает Spark

Спарк интегрирован в Hadoop — экосистему инструментов с открытым доступом, в которую входят библиотеки, система управления кластером (Yet Another Resource Negotiator), технология хранения файлов на различных серверах (Hadoop Distributed File System) и система вычислений MapReduce. Классическую модель Hadoop MapReduce и Spark постоянно сравнивают, когда речь заходит об обработке больших данных.

Принципиальные отличия Spark и MapReduce

Пакетная обработка данных

Хранит данные на диске

В 100 раз быстрее, чем MapReduce

Обработка данных в реальном времени

Хранит данные в оперативной памяти

Пакетная обработка в MapReduce проходит на нескольких компьютерах (их также называют узлами) в два этапа: на первом головной узел обрабатывает данные и распределяет их между рабочими узлами, на втором рабочие узлы сворачивают данные и отправляют обратно в головной. Второй шаг пакетной обработки не начнется, пока не завершится первый.

Читайте также: Какой язык учить аналитику данных?

Обработка данных в реальном времени с помощью Spark Streaming — это переход на микропакетный принцип, когда данные постоянно обрабатываются небольшими группами.

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Кроме этого, вычисления MapReduce производятся на диске, а Spark производит их в оперативной памяти, и за счет этого его производительность возрастает в 100 раз. Однако специалисты предупреждают, что заявленная «молниеносная скорость работы» Spark не всегда способна решить задачу. Если потребуется обработать больше 10 Тб данных, классический MapReduce доведет вычисление до конца, а вот у Spark может не хватить памяти для такого вычисления.

Но даже сбой в работе кластера не спровоцирует потерю данных. Основу Spark составляют устойчивые распределенные наборы данных (Resilient Distributed Dataset, RDD). Это значит, что каждый датасет хранится на нескольких узлах одновременно и это защищает весь массив.

Освойте самую перспективную профессию 2021 года. После обучения вы будете обладать навыками middle-специалиста и рассчитывать на среднюю зарплату по отрасли.

Разработчики говорят, что до выхода версии Spark 2.0 платформа работала нестабильно, постоянно падала, ей не хватало памяти, и проблемы решались многочисленными обновлениями. Но в 2021 году специалисты уже не сталкиваются с этим, а обновления в основном направлены на расширение функционала и поддержку новых языков.

✅ «Наша компания использует Spark для прогнозирования финансовых рисков»

❌ «Я учусь работать в программе Spark»

Источник

Apache Spark: из open source в индустрию

Алёна Лазарева, редактор-фрилансер, специально для блога Нетологии написала обзорную статью об одном из популярных инструментов специалиста по Big Data — фреймворке Apache Spark.

Люди часто не догадываются о том, как Big Data влияет на их жизнь. Но каждый человек — источник больших данных. Специалисты по Big Data собирают и анализируют цифровые следы: лайки, комментарии, просмотры видео на Youtube, данные GPS с наших смартфонов, финансовые транзакции, поведение на сайтах и многое другое. Их не интересует каждый человек, их интересуют закономерности.

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Понимание этих закономерностей помогает оптимизировать рекламные кампании, предсказать потребность клиента в продукте или услуге, оценить настроение пользователей.

Согласно опросам и исследованиям, Big Data чаще всего внедряют в областях маркетинга и ИТ, и только после этого идут исследования, прямые продажи, логистика, финансы и так далее.

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Для работы с большими данными были разработаны специальные инструменты. Наиболее популярный на сегодняшний день — Apache Spark.

Что такое Apache Spark

Apache Spark — это фреймворк с открытым исходным кодом для параллельной обработки и анализа слабоструктурированных данных в оперативной памяти.

Главные преимущества Spark — производительность, удобный программный интерфейс с неявной параллелизацией и отказоустойчивостью. Spark поддерживает четыре языка: Scala, Java, Python и R.

Фреймворк состоит из пяти компонентов: ядра и четырех библиотек, каждая из которых решает определенную задачу.

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Spark Core — основа фреймворка. Оно обеспечивает распределенную диспетчеризацию, планирование и базовые функции ввода-вывода.

Spark SQL — одна из четырех библиотек фреймворка для структурированной обработки данных. Она использует структуру данных, называемую DataFrames и может выступать в роли распределенного механизма запросов SQL. Это позволяет выполнять запросы Hadoop Hive до 100 раз быстрее.

Spark Streaming — простой в использовании инструмент для обработки потоковых данных. Несмотря на название, Spark Streaming не обрабатывает данные в реальном времени, а делает это в режиме micro-batch. Создатели Spark утверждают, что производительность от этого страдает несильно, поскольку минимальное время обработки каждого micro-batch 0,5 секунды.

Библиотека позволяет использовать код приложений batch-анализа для потоковой аналитики, что облегчает реализацию λ-архитектуры.

Spark Streaming легко интегрируется с широким спектром популярных источников данных: HDFS, Flume, Kafka, ZeroMQ, Kinesis и Twitter.

MLlib — это распределенная система машинного обучения с высокой скоростью. Она в 9 быстрее своего конкурента — библиотеки Apache Mahout при тестировании бенчмарками на алгоритме чередующихся наименьших квадратов (ALS).

MLlib включает в себя популярные алгоритмы:

Как появился

Первым фреймворком для работы с Big Data был Apache Hadoop, реализованный на базе технологии MapReduce.

В 2009 году группа аспирантов из Калифорнийского университета Беркли разработала систему управления кластером с открытым исходным кодом — Mesos. Чтобы показать все возможности своего продукта и то, как легко управлять фреймворком на базе Mesos, всё та же группа аспирантов начала работу над Spark.

По задумке создателей, Spark должен был стать не просто альтернативой Hadoop, но и превзойти его.

Основное различие двух фреймворков — способ обращения к данным. Hadoop сохраняет данные на жесткий диск на каждом шаге алгоритма MapReduce, а Spark производит все операции в оперативной памяти. Благодаря этому Spark выигрывает в производительности до 100 раз и позволяет обрабатывать данные в потоке.

В 2010 году проект был опубликован под лицензией BSD, а в 2013 году перешел под лицензию Apache Software Foundation, который спонсирует и разрабатывает перспективные проекты. Mesos также привлек внимание Apache и перешел под его лицензию, но не стал таким же популярным, как Spark.

Как используется

По результатам опроса, который фонд Apache провел в 2016 году, более 1000 компаний используют Spark. Его применяют не только в маркетинге. Вот часть задач, которые компании решают при помощи Spark.

Альтернативы

С развитием потребности к сбору, анализу и обработке больших данных появляются новые фреймворки. Некоторые большие корпорации разрабатывают собственный продукт с учетом внутренних задач и потребностей. Например, так появился Beam от Google и Kinesis от Amazon. Если говорить о фреймворках, популярных среди широкого круга пользователей, то кроме уже упомянутого Hadoop можно назвать Apache Flink, Apache Storm и Apache Samza.

Мы сравнили четыре фреймворка под лицензией Apache по ключевым показателям:

что такое apache spark. Смотреть фото что такое apache spark. Смотреть картинку что такое apache spark. Картинка про что такое apache spark. Фото что такое apache spark

Каждый фреймворк имеет свои слабые и сильные стороны. Пока ни один из них не является универсальным и не может заменить остальные. Поэтому при работе с большими данными компании выбирают тот фреймворк, который лучше всего подходит для решения конкретной задачи. Некоторые компании одновременно используют несколько фреймворков, например, TripAdvisor и Groupon.

Подводя итог

Apache Spark — самый популярный и быстроразвивающийся фреймворк для работы с Big Data. Хорошие технические параметры и четыре дополнительных библиотеки позволяют использовать Spark для решения широкого круга задач.

Из неочевидных плюсов фреймворка — многочисленное Spark-комьюнити и большое количество информации о нем в открытом доступе. Из очевидных минусов — задержка обработки данных больше, чем у фреймворков с потоковой моделью.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *