Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
7
Добавлен:
16.01.2025
Размер:
7.83 Mб
Скачать

На основе Hadoop создан целый ряд продуктов для обработки данных. Вот список лишь наиболее популярных из них:

Pig – высокоуровневый язык потоков данных для

параллельного программирования;

HBase – распределенная база данных, которая обес-

печивает хранение больших таблиц;

Cassandra – устойчивая к ошибкам, децентрализо-

ванная база данных;

Hive – хранилище данных c функциями объедине-

ния данных и бистрого поиска;

Mahout – библиотека методов машинного обучения

и извлечения знаний.

Hadoop является очень динамично развивающейся технологией. Поэтому наиболее свежую информацию рекомендуется получать в Интернете на сайте

http://hadoop.apache.org/ .

Storm – система потоковой обработки

Storm является бесплатной технологией и программной реализацией распределенной вычислительной системы реального времени [15]. Эта система позволяет строить надежную обработку неограниченных потоков данных подобно тому как Hadoop делает это с пакетной обработкой. Storm применяется для аналитики реального времени, онлайнового машинного обучения, непрерывных вычислений, распределенных ETL и других операций с потоками больших данных.

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

топологии и Storm кластер. Кластер является объектом, подобным Hadoop кластеру, а вместо запуска MapReduce job здесь запускаются Storm topologies. Jobs и Topologies имеют клю-

чевое различие – первые в нормальном режиме завершают работу, а вторые обрабатывают сообщения всегда. В Storm кластере имеется два типа узлов master node и worker nodes (рисунок 2.28). На master node запускается демон называе-

мый Nimbus, который подобен JobTracker в Hadoop. Nimbus

ответственнен за распределение кода по рабочим узлам клас-

81

тера, распределение задач по машинам и запуск и остановку рабочих процессов. Каждый рабочий процесс выполняет подмножество топологии. Работающая топология состоит из многих рабочих процессов, распределенных по многим машинам. Каждый рабочий узел (worker node) имеет демон под названием Supervisor. Этот модуль слушает все процессы на своей машине и запускает и останавливает их по инициативе Nimbus. Координация между Nimbus и всеми Supervisor производится через специальный кластер, называемый Zookeeper. Этот кластер также хранит на своем дисковом пространстве состояние всех процессов, что позволяет восстанавливать после сбоя отдельно любую машину рабочего кластера. Чтобы выполнить вычисления в реальном времени на Storm нужно создать топологию (topologies) – граф вычислений. Каждый узел в топологии содержит логику процессинга и линк между узлами, показывающий как данные должны быть переданы между узлами.

Основной абстракцией в Storm является поток (stream). Потоком называется неограниченная последовательность кортежей (tuples). Источники потоков данных для обработки представляются в топологии абстракцией, называемой spout, а обработчики потоков, которые могут выполнять функции, фильтровать потоки, агрегировать или объединять потоки данных, взаимодействовать с базами данных называются

bolt.

Стек Elastic

За последние несколько лет появились различные системы для хранения и обработки больших массивов данных. Среди них можно выделить проекты экосистемы Hadoop, некоторые базы данных (БД) NoSQL, а также поисковые и аналитические системы наподобие Elasticsearch. Hadoop и любая база данных NoSQL имеют свои преимущества и области применения.

Elastic Stack — обширная экосистема компонентов, ко-

торые служат для поиска и обработки данных. Основные компоненты Elastic Stack — это Kibana, Logstash, Beats, X- Pack и Elasticsearch. Ядром Elastic Stack выступает поиско-

вая система Elasticsearch, которая предоставляет возможности для хранения, поиска и обработки данных. Утилита

82

Kibana, которую также называют окном в Elastic Stack, явля-

ется отличным средством визуализации и пользовательским интерфейсом для Elastic Stack. Компоненты Logstash и Beats

позволяют передавать данные в Elastic Stack. X-Pack предос-

тавляет мощный функционал: можно настраивать мониторинг, добавлять различные уведомления, устанавливать параметры безопасности для подготовки вашей системы к эксплуатации. Поскольку Elasticsearch является ядром Elastic

Stack

Elasticsearch — высокомасштабируемая распределенная

поисковая система полнотекстового поиска и анализа данных, работающая в режиме реального времени. Утилита позволяет хранить, искать и анализировать большие объемы данных. Обычно используется в качестве базового механизма/технологии, помогая приложениям со сложными функциями поиска. Elasticsearch представляет собой основной ком-

понент Elastic Stack.

Elasticsearch как сердце Elastic Stack играет основную роль в поиске и анализе данных. Она построена на уникальной технологии — Apache Lucene. Благодаря этому Elasticsearch в корне отличается от традиционных решений для реляционных баз данных или NoSQL. Ниже перечислены основные преимущества использования Elasticsearch в качестве хранилища данных:

неструктурированность, документоориентированность;

возможность поиска;

возможность анализа данных;

поддержка пользовательских библиотек и REST API;

легкое управление и масштабирование;

работа в псевдореальном времени;

высокая скорость работы;

устойчивость к ошибкам и сбоям.

Обзор компонентов Elastic Stack

Некоторые компоненты универсальны, их можно применять без Elastic Stack или других инструментов.

83

Elasticsearch

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

Elasticsearch. Вы можете работать с Elasticsearch без каких-

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

Чтобы работать с реляционными базами данных, нужно разбираться в таких понятиях, как строки, столбцы, таблицы и схемы. Elasticsearch и другие хранилища, ориентированные на документы, работают по иному принципу. Система Elasticsearch имеет четкую ориентацию на документы. Лучше всего для нее подходят JSON-документы. Они организованы с

помощью различных типов и индексов. Далее мы рассмотрим ключевые понятия Elasticsearch:

индекс;

тип;

документ;

кластер;

узел;

шарды и копии;

разметку и типы данных;

обратный индекс.

Индекс — это контейнер, который в Elasticsearch хранит документы одного типа и управляет ими. Индекс может содержать документы одного типа,

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

Тип

Типы помогают логически группировать или организовывать однотипные документы по индексам.

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

84

одном типе, таких как «клиенты» и «продукты». Имеет смысл хранить их в разных типах и с разными индексами.

Документ

Как уже было сказано, JSON-документы лучше всего

подходят для использования в Elasticsearch. Документ состоит из нескольких полей и является базовой единицей информации, хранимой в Elasticsearch. Например, у вас может быть документ, соответствующий одному продукту, одному клиенту или одной позиции заказа.

Документы содержат несколько полей. В документах JSON каждое поле имеет определенный тип. В примере с каталогом продуктов, который мы видели ранее, были поля sku, title, description, price и др. Каждое поле и его значение можно увидеть как пару «ключ — значение» в документе, где ключ

— это имя поля, а значение — значение поля.

Узел

Elasticsearch — распределенная система. Она состоит из

множества процессов, запущенных на разных устройствах в сети и взаимодействующих с другими процессами. В главе 1 мы скачали, установили и запустили Elasticsearch. Таким образом мы запустили так называемый единичный узел класте-

ра Elasticsearch.

Узел Elasticsearch — это единичный сервер системы, который может быть частью большого кластера узлов. Он участвует в индексировании, поиске и выполнении других операций, поддерживаемых Elasticsearch. Каждому узлу Elasticsearch в момент запуска присваиваются уникальный идентификатор и имя.

Каждому узлу Elasticsearch соответствует основной конфигурационный файл, который находится в подкаталоге настроек. Формат файла YML (полное название — YAML Ain’t Markup Language). Вы можете использовать этот файл для

изменения значений по умолчанию, таких как имя узла, порты, имя кластера.

На базовом уровне узел соответствует одному запущенному процессу Elastic-search. Он отвечает за управление соответствующей ему частью данных.

85

Кластер

Кластер содержит один или несколько индексов и отвечает за выполнение таких операций, как поиск, индексирование и агрегации. Кластер формируется одним или несколькими узлами. Любой узел Elasticsearch всегда является частью кластера, даже если это кластер единичного узла. По умолчанию каждый узел пытается присоединиться к кластеру с именем Elasticsearch. Если вы запускаете несколько узлов внутри одной сети без изменения параметра cluster.name в файле config/elasticsearch.yml, они автоматически объединяются в кластер.

Кластер состоит из нескольких узлов, каждый из которых отвечает за хранение своей части данных и управление ею. Один кластер может хранить один или несколько индексов. Индекс логически группирует разные типы документов.

Шарды и копии

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

Процесс разделения данных по шардам называется шардированием. Это неотъемлемая часть Elasticsearch, необходимая для масштабируемой и параллельной работы с выполнением оптимизации:

дискового пространства по разным узлам кластера;

вычислительной мощности по разным узлам кластера.

Распределенные системы наподобие Elasticsearch приспособлены к работе даже при неполадках оборудования. Для этого предусмотрены реплики шардов, или копии. Каждый шард индекса может быть настроен таким образом, чтобы у него было некоторое количество копий или не было ни одной. Реплики шардов — это дополнительные копии оригинального или первичного шарда для обеспечения высокого уровня доступности данных.

86

Разметка и типы данных

Elasticsearch — неструктурированная система, благода-

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

Типы данных

Elasticsearch поддерживает широкий набор типов данных для различных сценариев хранения текстовых данных, чисел, булевых, бинарных объектов, массивов, объектов, вложенных типов, геоточек, геоформ и многих других специализированных типов данных, например адресов IPv4 и IPv6. В документе каждое поле имеет ассоциированный тип данных.

Logstash

Утилита Logstash помогает централизовать данные, связанные с событиями, такие как сведения из файлов регистрации (логов), разные показатели (метрики) или любые другие данные в любом формате. Она может выполнить обработку данных до того, как сформировать нужную вам выборку. Это ключевой компонент Elastic Stack, который используется для сбора и обработки ваших контейнеров данных.

Logstash — компонент на стороне сервера. Его цель —

выполнить сбор данных из обширного количества источников ввода в масштабируемом виде, обработать информацию и отправить ее по месту назначения. По умолчанию преобразованная информация поступает в Elasticsearch, но вы можете выбрать один из многих других вариантов вывода. Архитектура Logstash основана на плагинах и легко расширяется. Поддерживаются три вида плагинов: ввода, фильтрации и вывода.

Kibana

Kibana — инструмент визуализации для Elastic Stack,

который поможет вам наглядно представить данные в Elasticsearch. Его также часто называют окном в Elastic

Stack. В Kibana предлагается множество вариантов визуали-

87

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

В Kibana также предусмотрены инструменты для управления и разработки. Вы можете управлять настройками X-

Pack для обеспечения безопасности в Elastic Stack, а с помощью инструментов разработчика создавать и тестировать запросы REST API.

Kibana Console представляет собой удобный редактор, который поддерживает функцию автозавершения и форматирования запросов во время их написания.

Что такое REST API? REST означает Representational State Transfer. Это архитектурный стиль для взаимодействия

систем друг с другом. REST развивался вместе с протоколом HTTP, и почти все системы, основанные на REST, используют HTTP как свой протокол. HTTP поддерживает различные ме-

тоды: GET, POST, PUT, DELETE, HEAD и др. Например, GET

предназначен для получения или поиска чего-либо, POST ис-

пользуется для создания нового ресурса, PUT может применяться для создания или обновления существующего ресурса, а DELETE — для безвозвратного удаления.

Elastic Cloud

Elastic Cloud — это облачный сервис по управлению

компонентами Elastic Stack, предоставляемый компанией

Elastic (https://www.elastic.co/) — автором и разработчиком

Elasticsearch и других компонентов Elastic Stack. Все компо-

ненты продукта (помимо X-Pack и Elastic Cloud) созданы на

базе открытого исходного кода. Компания Elastic обслуживает все компоненты Elastic Stack, проводит тренинги, выполняет разработку и предоставляет облачные сервисы.

Помимо Elastic Cloud, есть и другие облачные решения,

доступные для Elastic-search, например Amazon Web Services (AWS). Основное преимущество Elastic Cloud в том, что он создан и обслуживается авторами Elasticsearch и других ком-

понентов Elastic Stack.

88

Как вы можете видеть, Elasticsearch и Elastic Stack мо-

жно использовать для широкого спектра задач. Elastic Stack

— это платформа с расширенным набором инструментов для создания комплексных решений поиска и аналитики. Она подходит для разработчиков, архитекторов, бизнес-

аналитиков и системных администраторов. Вполне возможно создать решение на базе Elastic Stack, почти не прибегая к написанию кода, исключительно за счет изменения конфигурации. В то же время система Elasticsearch очень гибкая, следовательно, разработчики и программисты могут строить мощные приложения благодаря обширной поддержке языков программирования и REST API.

Sphinxsearch

Еще одна полнотекстовая поисковая система для боль-

ших данных – Sphinxsearch.

Sphinxsearch (от SQL Phrase Index) распространяется по лицензии GNU GPL либо, для версий 3.0+ без исходных кодов.

Отличительной особенностью является высокая скорость индексации и поиска, а также интеграция с существующими СУБД (MySQL, PostgreSQL) и API для распространѐнных языков веб-программирования (официально поддерживаются PHP, Python, Java; существуют реализованные сообщест-

вом API для Perl, Ruby, .NET и C++).

Официальный сайт системы – http://sphinxsearch.com/.

Система Sphinxsearch обладает такими особенностями:

Высокая скорость индексации (до 10-15 МБ/сек на

каждое процессорное ядро);

Высокая скорость поиска (до 150—250 запросов в секунду на каждое процессорное ядро с 1 000 000 документов);

Большая масштабируемость (крупнейший известный кластер индексирует до 3 000 000 000 документов и поддерживает более 50 миллионов запросов в день);

Поддержка распределенного поиска;

Поддержка нескольких полей полнотекстового поиска в документе (до 32 по умолчанию);

89

Поддержка нескольких дополнительных атрибутов для каждого документа (то есть группы, временные метки и т. д.);

Поддержка однобайтовых кодировок и UTF-8;

Поддержка морфологического поиска — имеются встроенные модули для английского, русского и чешского языков; доступны модули для французского, испанского, португальского, итальянского, румынского, немецкого, голландского, шведского, норвежского, датского, финского, венгерского языков;

Нативная поддержка существующих СУБД

PostgreSQL и MySQL, поддержка ODBC совместимых баз данных (MS SQL, Oracle и т. д.).

В 2017 году команда Manticore Software

сделала

форк Sphinxsearch 2.3.2, который назвали Manticore

Search.

По словам разработчиков, менеджмент системы Sphinxsearch не справлялся с сопровождением системы, а именно, не исправлялись обнаруженные ошибки, не реализовывались объявленные возможности, диалог пользователей с разработчиками Sphinxsearch был затруднен. Sphinx версии 3 уже можно вос-

принимать как проприетарное решение для ограниченного круга пользователей. Фактически новая версия системы (Manticore Search) решила монгие из этих проблем, в том

числе, обеспечена поддержка кода в целом, организовано современнное взаимодействие с пользователями Sphinxsearch и Manticore, реализаованы такие возможности, присущие, в

частности, Elasticsearch: репликация, auto id, JSON інтер-

фейс, возможность создать/удалить индекс на лету, наличие хранилища документов, развитых real-time индексов.

Neo4j

Neo4j графовая система управления базами дан-

ных с открытым исходным кодом, языке Java, с поддержкой транзакции (ACID). По состоянию на 2015 год считается самой распространѐнной графовой СУБД [Робинсон, 2016]. Раз-

работчик — американская компания Neo Technology, разработка ведѐтся с 2003 года.

Данные хранит в собственном формате, специализированно приспособленном для представления графовой инфор-

90

Соседние файлы в папке !Экзамен зачет 25-26 год