Для чего нужен apache 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 предусмотрено три основных компонента: драйвер, исполнители и диспетчер кластера. Приложения Spark выполняются как независимые наборы процессов в кластере, координируемые программой-драйвером.
Дополнительные сведения см. в статье Обзор режима кластера.
Драйвер
Драйвер состоит из пользовательской программы, например консольного приложения C#, и сеанса Spark. Сеанс Spark принимает программу и делит ее на небольшие задачи, которые обрабатываются исполнителями.
Исполнители
Каждый исполнитель (рабочий узел) получает от драйвера задачу и выполняет ее. Исполнители находятся в сущности, которая называется кластером.
Диспетчер кластера
Диспетчер кластера взаимодействует с драйвером и исполнителями, выполняя следующие задачи:
Поддержка языков
Apache Spark поддерживает следующие языки программирования:
API-интерфейсы Spark
Apache Spark поддерживает следующие API:
Дальнейшие действия
Зачем разработчикам нужен Apache Spark
Зачем используется Apache Spark? В статье рассмотрим, какую проблему обработки больших объёмов данных решает этот фреймворк.
Цифровая вселенная
Данные повсюду вокруг нас. В IDC оценили размер «цифровой вселенной» в 4,4 зеттабайта (1 триллион гигабайт) в 2013 году. По наблюдениям, цифровая вселенная ежегодно увеличивается на 40%. К 2020 году IDC ожидает, что размер достигнет 44 зеттабайтов – хватит по одному биту данных на каждую звезду физической вселенной.
У нас много данных, и мы не избавляемся от них. Поэтому нужен способ хранения увеличивающихся объёмов данных в масштабе, с защитой от потери в результате аппаратного сбоя. Наконец, нужно средство обработки этой информации с быстрым контуром обратной связи. Спасибо космосу за Hadoop и Spark.
Чтобы продемонстрировать полезность Spark, начнём с примера. 500 ГБ выборочных данных о погоде включают:
Страна | Город | Дата | Температура
Для расчёта максимальной температуры по стране для этих данных начинаем с нативной программы на Java, поскольку Java – наш второй любимый язык программирования:
Решение на Java
Однако при размере 500 ГБ даже такая простая задача займёт 5 часов с использованием этого нативного Java-метода.
«Java отстой, напишу это на Ruby и круто, если быстро, Ruby – мой любимый»
Решение на Ruby
Однако любимый Ruby больше не подходит для этой задачи. Ввод-вывод – не сильная сторона Ruby, поэтому Ruby потребуется ещё больше времени на поиск максимальной температуры, чем Java.
MaxTemperatureMapper
MaxTemperatureReducer
MapReduce – жизнеспособное решение поставленной задачи. Этот подход будет работать намного быстрее по сравнению с нативным решением Java, потому что MapReduce распределяет задачи между рабочими узлами в кластере. Строки из нашего файла передаются на каждый узел кластера параллельно, а в нативный Java-метод работает всего лишь поочередно.
Проблема
Вычислить максимальную температуру для каждой страны – по сути новая задача, но далеко не новаторский анализ. Данные реального мира несут в себе более громоздкие схемы и сложный анализ. Это подталкивает к использованию специальных инструментов.
Что, если вместо максимальной температуры, нас попросят найти максимальную температуру по стране и городу, а потом разбить по дням? Что, если мы перепутали, и нужно найти страну с самыми высокими средними температурами? Или, если хотим найти среду обитания, где температура никогда не ниже 15°C и не выше 20°C (Антананариву, Мадагаскар, кажется привлекательной).
MapReduce справляется с пакетной обработкой данных. Однако отстаёт, когда дело доходит до повторного анализа и небольших циклов обратной связи. Единственный способ повторно использовать данные между вычислениями – записать их во внешнюю систему хранения (например, HDFS). MapReduce записывает содержимое всех Map для каждого задания – до Reduce-шага. Это означает, что каждое MapReduce-задание выполнит одну задачу, которая определена в его начале.
Для выполнения упомянутого выше анализа потребовалось бы три отдельных задания MapReduce:
Очевидно, что это легко выйдет из-под контроля.
Обмен данными в MapReduce происходит медленно из-за самой природы распределённых файловых систем: репликации, сериализации и, главное, дискового ввода-вывода. Приложения MapReduce тратят до 90% времени на чтение и запись с диска.
Столкнувшись с такой проблемой, исследователи решили разработать специальный фреймворк, который мог бы выполнять то, что MapReduce не может: вычисления в оперативной памяти на кластере подключенных машин.
Решение: Apache Spark
Spark решает эту проблему. Spark обрабатывает несколько запросов быстро и с минимальными издержками.
Три указанных выше маппера реализуются в одном и том же задании Spark. И выдают несколько результатов, если нужно. Закомментированные строки легко использовать для установки правильного ключа в зависимости от требований конкретного задания.
Spark-реализация MaxTemperaMapper с использованием RDD
Spark ещё и выполняет обработку в 10 раз быстрее, чем MapReduce, при сопоставимых задачах, поскольку Spark работает только в оперативной памяти. Поэтому не используются операции записи и чтения с диска, как правило, медленные и дорогостоящие.
Apache Spark – удивительно мощный инструмент для анализа и преобразования данных. Если эта публикация пробудила в вас интерес, следите за обновлениями. Скоро будем постепенно углубляться в тонкости Apache Spark Framework.
Что такое Apache Spark и как он используется в Big Data
В работе с Big Data используется много разных инструментов. Даже для одних и тех же задач существует несколько технологий, у каждой из которых свои особенности и недостатки. Может быть сложно разобраться во всем этом многообразии и что-то выбрать.
Чтобы помочь в этом, мы расскажем об одном из инструментов — Apache Spark. Вы узнаете, что это такое, как он используется при работе с большими данными и чем он может помочь. Также мы сравним его с другой похожей технологией — Hadoop MapReduce.
Что такое Apache Spark
Apache Spark — это платформа, которая используется в Big Data для кластерных вычислений и крупномасштабной обработки данных. Spark обрабатывает данные в оперативной памяти и редко обращается к диску, поэтому работает очень быстро.
Apache Spark полностью совместим с экосистемой Hadoop и легко встраивается в существующие решения. У него нет собственного хранилища данных, и он может работать с различными источниками: HDFS, Hive, S3, HBase, Cassandra и другими. Поддерживает несколько языков программирования: Scala, Python, Java, R, SQL.
Spark используется для обработки данных, например фильтрации, сортировки, очистки, валидации и так далее. Его место в процессе работы с большими данными изображено ниже на схеме:
Spark состоит из нескольких компонентов.
Это базовый движок для обработки данных, который лежит в основе всей платформы. Ядро взаимодействует с системами хранения, управляет памятью, планирует и распределяет нагрузку в кластере. Также оно отвечает за поддержку API языков программирования.
Этот модуль служит для упрощения работы со структурированными данными и позволяет выполнять запросы на языке SQL. Главная его задача состоит в том, чтобы дата-инженеры не задумывались о распределенной природе хранения данных, а сосредоточились на сценариях их использования.
Обеспечивает масштабируемую, высокопроизводительную и отказоустойчивую потоковую обработку данных в реальном времени. В качестве источников данных для Spark могут выступать Kafka, Flume, Kinesis и другие системы.
Это масштабируемая библиотека машинного обучения низкого уровня. В библиотеке реализованы различные алгоритмы машинного обучения, например кластеризация, регрессия, классификация и коллаборативная фильтрация.
Служит для манипуляций над графами и их параллельной обработки. GraphX может измерять связность графов, распределение степеней, среднюю длину пути и другие показатели. Он также может соединять графы и быстро их преобразовывать. Кроме встроенных операций над графами, в GraphX также есть библиотека с реализацией алгоритма PageRank.
Компоненты Apache Spark
Сравнение Apache Spark и Apache MapReduce
Раньше для обработки больших данных, как правило, использовался MapReduce. Это компонент Hadoop, который положил начало обработке данных в Big Data. Но у него есть две глобальные проблемы.
Но в 2014 году начал завоевывать популярность другой инструмент — Spark, и сейчас он практически вытеснил MapReduce. Apache Spark разрабатывался для устранения недостатков MapReduce, но с сохранением его преимуществ. Вот как он решает проблемы MapReduce:
В Spark есть API для разных языков программирования, поэтому писать код намного проще и сам код получается компактнее. Обычно разработчики пишут на Spark довольно высокоуровневые инструкции, а он сам решает, как выполнить их оптимальнее. Зачастую он может это сделать лучше, чем человек.
Например, Junior Data-engineer может написать код на Spark, который будет работать быстрее, чем код, написанный Senior Data-engineer на MapReduce. Также на Spark меньше шансов сделать серьезную ошибку, а если она все-таки будет, то ее легче исправить.
Как облака могут усилить Apache Spark
Для обработки данных в Big Data очень важна горизонтальная масштабируемость. Чем больше узлов в кластере, тем быстрее обрабатываются данные. И Spark не исключение. Строить кластеры для обработки данных на своем оборудовании сложно и невыгодно. Заранее тяжело угадать, сколько нужно серверов и какой они должны быть мощности. Если использовать слишком много серверов, они будут простаивать. Если слишком мало, то обработка данных будет занимать много времени. Поэтому стоит обратить внимание на облачные технологии.
Облачные платформы могут предоставить огромное количество ресурсов по требованию. Если у вас небольшая нагрузка — подключаете несколько небольших узлов. Когда нагрузка возрастет, можно быстро добавить новые узлы в кластер. Это позволит использовать ресурсы эффективнее.
Кроме того, облачные платформы предоставляют и другие инструменты для работы с большими данными. Например, на платформе VK Cloud Solutions (бывш. MCS) есть разные инструменты для работы с Big Data: Spark, Hadoop, Kafka, Storm. Эти инструменты предоставляются «как сервис», то есть их не нужно устанавливать и поддерживать, этим занимается облачный провайдер.
Кроме очевидных инструментов для работы с большими данными, облачные платформы предоставляют и другие полезные технологии. Например, Apache Spark можно развернуть в Kubernetes, чтобы получить больше гибкости и решить несколько проблем классического Hadoop-кластера — вроде изоляции сред или разделения Storage- и Compute-слоев. Подробнее об этом мы писали в отдельной статье.
Apache Spark: гайд для новичков
Mar 13, 2020 · 8 min read
Что такое Apache Spark?
Специалисты компании Databricks, основанной создателями Spark, собрали лучшее о функционале Apache Spark в своей книге Gentle Intro to Apache Spark ( очень рекомендую прочитать):
“Apache Spark — это целостная вычислительная система с набором библиотек для п араллельной обработки данных на кластерах компьютеров. На данный момент Spark считается самым активно разрабатываемым средством с открытым кодом для решения подобных задач, что позволяет ему быть полезным инструментом для любого разработчика или исследователя-специалиста, заинтересованного в больших данных. Spark поддерживает множество широко используемых языков программирования (Python, Java, Scala и R), а также библиотеки для различных задач, начиная от SQL и заканчивая стримингом и машинным обучением, а запустить его можно как с ноутбука, так и с кластера, состоящего из тысячи серверов. Благодаря этому Apache Spark и является удобной системой для начала самостоятельной работы, перетекающей в обработку больших данных в невероятно огромных масштабах.”
Что такое большие данные?
Посмотрим-ка на популярное определение больших данных по Гартнеру. Это поможет разобраться в том, как 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 может помочь преодолеть это затруднение при помощи возможностей его файловой системы. Привожу ниже пример того, как эти две системы могут работать вместе:
Это изображение наглядно показывает, как Spark использует в работе лучшее от Hadoop: HDFS для чтения и хранения данных, MapReduce — для дополнительной обработки и YARN — для распределения ресурсов.
Дальше я пробую сосредоточиться на множестве преимуществ Spark перед Hadoop MapReduce. Для этого я сделаю краткое поверхностное сравнение.
Скорость
Просто пользоваться
Обработка больших наборов данных
Функциональность
Apache Spark — неизменный победитель в этой категории. Ниже я даю список основных задач по анализу больших данных, в которых Spark опережает Hadoop по производительности:
Машинное обучение. В Spark есть MLlib — встроенная библиотека машинного обучения, а вот Hadoop нужна третья сторона для такого же функционала. MLlib имеет алгоритмы “out-of-the-box” (возможность подключения устройства сразу после того, как его достали из коробки, без необходимости устанавливать дополнительное ПО, драйверы и т.д.), которые также реализуются в памяти.
А вот и визуальный итог множества возможностей Spark и его совместимости с другими инструментами обработки больших данных и языками программирования:
Заключение
Вместе со всем этим массовым распространением больших данных и экспоненциально растущей скоростью вычислительных мощностей инструменты вроде Apache Spark и других программ, анализирующих большие данные, скоро будут незаменимы в работе исследователей данных и быстро станут стандартом в индустрии реализации аналитики больших данных и решении сложных бизнес-задач в реальном времени.
Для тех, кому интересно погрузиться глубоко в технологию, которая стоит за всеми этими внешними функциями, почитайте книгу Databricks — “ A Gentle Intro to Apache Spark” или “ Big Data Analytics on Apache Spark”.
Знакомство с Apache Spark
Здравствуйте, уважаемые читатели!
Мы наконец-то приступаем к переводу серьезной книги о фреймворке Spark:
Сегодня мы предлагаем вашему вниманию перевод обзорной статьи о возможностях Spark, которую, полагаем, можно с полным правом назвать слегка потрясающей.
Я впервые услышал о Spark в конце 2013 года, когда заинтересовался Scala – именно на этом языке написан Spark. Несколько позже я принялся ради интереса разрабатывать проект из области Data Science, посвященный прогнозированию выживаемости пассажиров «Титаника». Оказалось, это отличный способ познакомиться с программированием на Spark и его концепциями. Настоятельно рекомендую познакомиться с ним всем начинающим Spark-разработчикам.
Сегодня Spark применяется во многих крупнейших компаниях, таких, как Amazon, eBay и Yahoo! Многие организации эксплуатируют Spark в кластерах, включающих тысячи узлов. Согласно FAQ по Spark, в крупнейшем из таких кластеров насчитывается более 8000 узлов. Действительно, Spark – такая технология, которую стоит взять на заметку и изучить.
В этой статье предлагается знакомство со Spark, приводятся примеры использования и образцы кода.
Что такое Apache Spark? Введение
Spark – это проект Apache, который позиционируется как инструмент для «молниеносных кластерных вычислений». Проект разрабатывается процветающим свободным сообществом, в настоящий момент является наиболее активным из проектов Apache.
Spark предоставляет быструю и универсальную платформу для обработки данных. По сравнению с Hadoop Spark ускоряет работу программ в памяти более чем в 100 раз, а на диске – более чем в 10 раз.
Кроме того, код на Spark пишется быстрее, поскольку здесь в вашем распоряжении будет более 80 высокоуровневых операторов. Чтобы оценить это, давайте рассмотрим аналог “Hello World!” из мира BigData: пример с подсчетом слов (Word Count). Программа, написанная на Java для MapReduce, содержала бы около 50 строк кода, а на Spark (Scala) нам потребуется всего лишь:
При изучении Apache Spark стоит отметить еще один немаловажный аспект: здесь предоставляется готовая интерактивная оболочка (REPL). При помощи REPL можно протестировать результат выполнения каждой строки кода без необходимости сначала программировать и выполнять все задание целиком. Поэтому написать готовый код удается гораздо быстрее, кроме того, обеспечивается ситуативный анализ данных.
Кроме того, Spark имеет следующие ключевые черты:
Ядро Spark дополняется набором мощных высокоуровневых библиотек, которые бесшовно стыкуются с ним в рамках того же приложения. В настоящее время к таким библиотекам относятся SparkSQL, Spark Streaming, MLlib (для машинного обучения) и GraphX – все они будут подробно рассмотрены в этой статье. Сейчас также разрабатываются другие библиотеки и расширения Spark.
Ядро Spark
Ядро Spark – это базовый движок для крупномасштабной параллельной и распределенной обработки данных. Ядро отвечает за:
Трансформации в Spark осуществляются в «ленивом» режиме — то есть, результат не вычисляется сразу после трансформации. Вместо этого они просто «запоминают» операцию, которую следует произвести, и набор данных (напр., файл), над которым нужно совершить операцию. Вычисление трансформаций происходит только тогда, когда вызывается действие, и его результат возвращается основной программе. Благодаря такому дизайну повышается эффективность Spark. Например, если большой файл был преобразован различными способами и передан первому действию, то Spark обработает и вернет результат лишь для первой строки, а не станет прорабатывать таким образом весь файл.
По умолчанию каждый трансформированный RDD может перевычисляться всякий раз, когда вы выполняете над ним новое действие. Однако RDD также можно долговременно хранить в памяти, используя для этого метод хранения или кэширования; в таком случае Spark будет держать нужные элементы на кластере, и вы сможете запрашивать их гораздо быстрее.
SparkSQL – это компонент Spark, поддерживающий запрашивание данных либо при помощи SQL, либо посредством Hive Query Language. Библиотека возникла как порт Apache Hive для работы поверх Spark (вместо MapReduce), а сейчас уже интегрирована со стеком Spark. Она не только обеспечивает поддержку различных источников данных, но и позволяет переплетать SQL-запросы с трансформациями кода; получается очень мощный инструмент. Ниже приведен пример Hive-совместимого запроса:
Spark Streaming поддерживает обработку потоковых данных в реальном времени; такими данными могут быть файлы логов рабочего веб-сервера (напр. Apache Flume и HDFS/S3), информация из соцсетей, например, Twitter, а также различные очереди сообщений вроде Kafka. «Под капотом» Spark Streaming получает входные потоки данных и разбивает данные на пакеты. Далее они обрабатываются движком Spark, после чего генерируется конечный поток данных (также в пакетной форме) как показано ниже.
API Spark Streaming точно соответствует API Spark Core, поэтому программисты без труда могут одновременно работать и с пакетными, и с потоковыми данными.
MLlib – это библиотека для машинного обучения, предоставляющая различные алгоритмы, разработанные для горизонтального масштабирования на кластере в целях классификации, регрессии, кластеризации, совместной фильтрации и т.д. Некоторые из этих алгоритмов работают и с потоковыми данными — например, линейная регрессия с использованием обычного метода наименьших квадратов или кластеризация по методу k-средних (список вскоре расширится). Apache Mahout (библиотека машинного обучения для Hadoop) уже ушла от MapReduce, теперь ее разработка ведется совместно с Spark MLlib.
GraphX – это библиотека для манипуляций над графами и выполнения с ними параллельных операций. Библиотека предоставляет универсальный инструмент для ETL, исследовательского анализа и итерационных вычислений на основе графов. Кроме встроенных операций для манипуляций над графами здесь также предоставляется библиотека обычных алгоритмов для работы с графами, например, PageRank.
Как использовать Apache Spark: пример с обнаружением событий
Теперь, когда мы разобрались, что такое Apache Spark, давайте подумаем, какие задачи и проблемы будут решаться с его помощью наиболее эффективно.
Недавно мне попалась статья об эксперименте по регистрации землетрясений путем анализа потока Twitter. Кстати, в статье было продемонстрировано, что этот метод позволяет узнать о землетрясении более оперативно, чем по сводкам Японского Метеорологического Агентства. Хотя технология, описанная в статье, и не похожа на Spark, этот пример кажется мне интересным именно в контексте Spark: он показывает, как можно работать с упрощенными фрагментами кода и без кода-клея.
Во-первых, потребуется отфильтровать те твиты, которые кажутся нам релевантными – например, с упоминанием «землетрясения» или «толчков». Это можно легко сделать при помощи Spark Streaming, вот так:
Затем нам потребуется произвести определенный семантический анализ твитов, чтобы определить, актуальны ли те толчки, о которых в них говорится. Вероятно, такие твиты, как «Землетрясение!» или «Сейчас трясет» будут считаться положительными результатами, а «Я на сейсмологической конференции» или «Вчера ужасно трясло» — отрицательными. Авторы статьи использовали для этой цели метод опорных векторов (SVM). Мы поступим также, только реализуем еще и потоковую версию. Полученный в результате образец кода из MLlib выглядел бы примерно так:
Если процент верных прогнозов в данной модели нас устраивает, мы можем переходить к следующему этапу: реагировать на обнаруженное землетрясение. Для этого нам потребуется определенное число (плотность) положительных твитов, полученных в определенный промежуток времени (как показано в статье). Обратите внимание: если твиты сопровождаются геолокационной информацией, то мы сможем определить и координаты землетрясения. Вооружившись этими знаниями, мы можем воспользоваться SparkSQL и запросить имеющуюся таблицу Hive (где хранятся данные о пользователях, желающих получать уведомления о землетрясениях), извлечь их электронные адреса и разослать им персонализированные предупреждения, вот так:
Другие варианты использования Apache Spark
Потенциально сфера применения Spark, разумеется, далеко не ограничивается сейсмологией.
Вот ориентировочная (то есть, ни в коем случае не исчерпывающая) подборка других практических ситуаций, где требуется скоростная, разноплановая и объемная обработка больших данных, для которой столь хорошо подходит Spark:
В игровой индустрии: обработка и обнаружение закономерностей, описывающих игровые события, поступающие сплошным потоком в реальном времени; в результате мы можем немедленно на них реагировать и делать на этом хорошие деньги, применяя удержание игроков, целевую рекламу, автокоррекцию уровня сложности и т.д.
В электронной коммерции информация о транзакциях, поступающая в реальном времени, может передаваться в потоковый алгоритм кластеризации, например, по k-средним или подвергаться совместной фильтрации, как в случае ALS. Затем результаты даже можно комбинировать с информацией из других неструктутрированных источников данных — например, с отзывами покупателей или рецензиями. Постепенно эту информацию можно применять для совершенствования рекомендаций с учетом новых тенденций.
В финансовой сфере или при обеспечении безопасности стек Spark может применяться для обнаружения мошенничества или вторжений, либо для аутентификации с учетом анализа рисков. Таким образом можно получать первоклассные результаты, собирая огромные объемы архивированных логов, комбинируя их с внешними источниками данных, например, с информацией об утечках данных или о взломанных аккаунтах (см., например, https://haveibeenpwned.com/), а также использовать информацию о соединениях/запросах, ориентируясь, например, на геолокацию по IP или на данные о времени
Итак, Spark помогает упростить нетривиальные задачи, связанные с большой вычислительной нагрузкой, обработкой больших объемов данных (как в реальном времени, так и архивированных), как структурированных, так и неструктурированных. Spark обеспечивает бесшовную интеграцию сложных возможностей – например, машинного обучения и алгоритмов для работы с графами. Spark несет обработку Big Data в массы. Попробуйте – не пожалеете!