Apache Spark для текстового поиска: найти всё, что скрыто
Никогда не сталкивались с Apache Spark? Читайте статью «6 фактов об Apache Spark, которые нужно знать каждому». О том, почему приложения для работы с Big Data не могут обойтись без текстового поиска с использованием Apache Spark, рассказывает Пракаш Дас. Пракаш работает архитектором в Informatica.
Текстовый поиск для логов
Приложения могут использовать текстовый поиск для работы с большими объёмами лог-файлов. Лог-файлы или логи – файлы с хронологическим описанием работы устройства или программы. Логи можно использовать не только, чтобы искать и устранять неполадки. Они помогут понять, как программа или устройство работает в нормальных условиях, определить параметры этой работы и другое.
Например, приложение может использовать текстовый поиск для логов, которые генерируются демонами sshd. Это позволит проанализировать причины неудачных попыток входа в систему, выяснить, кто из пользователей и с какого IP пытался осуществить вход. А также – мониторить неудачные попытки почти в реальном времени с регулярными интервалами, чтобы отличить нетипичное поведение от типичного.
Текстовый поиск в озёрах
Приложения могут использовать текстовый поиск и для работы с озером данных в системе Hadoop (в HDFS). Например, аналитики выгрузили базу продуктов с браком в озеро. Они ищут в этих данных инсайты или составляют на их основе прогнозы. Им понадобилось выгрузить перечень всех дефектов? Эти данные можно найти на основе нескольких ключевых слов, таких как сообщение об ошибке или ошибке в коде. Эта информация в текстовом формате обычно хранится в реляционной базе приложения.
Чем ещё искать текстовую информацию, кроме Apache Spark
Кроме Apache Spark, для логов и данных, сгенерированных с помощью программного обеспечения, можно использовать коммерческие инструменты Splunk, Sumo Logic, и другие. В open source можно найти библиотеку для высокопроизводительного полнотекстового поиска – Lucene. Она позволяет хранить и индексировать данные только на локальной системе файлов. Для инфраструктуры распределённого текстового поиска, приложение должно использовать Elasticsearch или Solr.
Оба поисковых инструмента основаны на Lucene и используют её для индексации и поиска в каждом отдельном ноде (узле кластера). После этого они агрегируют поисковые результаты в одной ноде, в той, которая получила первоначальный запрос из приложения. В ней результаты обобщаются отправляются в приложение, которое делало запрос. Для анализа логов особенно популярен такой инструмент из мира open source, как ELK (Elasticsearch и Kibana). В этой связке Kibana через браузер обеспечивает графический интерфейс для Elasticsearch. Elasticsearch переводит данные в собственную базу в формате JSON. В ней он осуществляет поиск. Через Elasticsearch можно осуществлять и аналитические запросы, которые требуют агрегирования информации.
Недостатки Elasticsearch
- Для загрузки в свой свою базу Elasticsearch сжимает данные. В них остаётся максимум смысла при минимуме знаков. Прямой доступ к этим данным оказывается затруднённым для других видов анализа. Например, для машинного обучения. Такая схема исключает использование готовых алгоритмов машинного обучения, которые понимают данные в открытом, чётко определённом формате.
- SQL-операции соединения (используются для сопоставления строк в реляционных базах) в Elasticsearch плохо масштабируются для больших объёмов данных. А такое масштабирование необходимо для некоторых типов аналитических запросов.
- Elasticsearch – это не универсальная платформа для распределённой обработки данных. Набор его возможностей ограничен. Поэтому при работе с ним часто приходится использовать дополнительные инструменты, например, тот же Apache Spark. Проблема может возникнуть, если ваше приложение Big Data захочет получить единый взгляд на данные из базы Elasticsearch и данные из реляционной базы. Это потребует привлечения дополнительных инструментов.
Apache Spark: и поиск, и аналитика
Что же делать в такой ситуации? Последний озвученный недостаток сам предлагает решение проблемы. Для текстового поиска приложений Big Data нужно использовать универсальную вычислительную платформу. Apache Spark – прекрасный пример платформы такого типа в open source. Эта платформа уже достигла популярности и продолжает набирать её: с каждой новой версией Apache Spark расширяет свою функциональность.
Apache Spark работает с данными напрямую в HDFS. Решение обеспечивает возможности работы с SQL с помощью Apache Spark SQL и с библиотекой алгоритмов машинного обучения анализа больших данных. Однако сам по себе Apache Spark в своём стандартном виде нельзя использовать как основу текстового поиска для приложений Big Data. Решение придётся доработать. Как? Это уже предмет другой статьи.
Обновлено: 21.03.2023
Опубликовано: 05.02.2019