Первая моя статья про Big Data была вводной — без этого нельзя. В ней я описал, что такое Big Data в моём понимании и каковы основные возможности его использования. В этом топике речь пойдёт о типовой архитектуре систем Big Data и будут рассмотрены все её существенные элементы.
Любое решение Big Data направлено на реализацию конкретной задачи и по–своему уникально. Однако вне зависимости от того, построено ли решение на бесплатных компонентах или на покупных технологиях, его архитектура будет выглядеть одинаково — примерно так:
Источники данных
Информация может попадать в систему хранения Big Data из различных внутренних и внешних источников. Источники могут различаться по типам, объёмам и скоростям предоставления данных. С помощью технологического стека Big Data поступающие данные консолидируются в большие наборы данных (big data sets), также называемые озёрами данных (data lakes).
Можно выделить две основные категории источников данных:
- Старого поколения — к ним относятся традиционные виды стандартов и протоколов. Все они характеризуются достаточно высокой плотностью полезной информации, например:
- HTTP веб-вервисы
- Реляционные базы данных
- Плоские файлы
- XML
- Нового поколения — это, как правило, «сырые» типы данных, получение и активное применение которых стало возможно лишь в последние 10 лет. В отличие от старого поколения данные нового поколения отличаются большим разнообразием, объёмом и скоростью поступления. В тоже время доля информации, на основе которой принимаются какие–либо решения, в данных нового поколения гораздо ниже и составляет обычно не более 10%. Примером данных нового поколения могут быть:
- Данные, поступающие непрерывным потоком с различных устройств
- Записи с колл–центров, в том числе полученные путём распознавания голоса
- Данные с GPS устройств, которые требуют высокую скорость обработки
- Сообщения и различного рода контент из социальных сетей
Подсистема фильтрации
Подсистема фильтрации, которая в англоязычной литературе именуется Ingestion Layer, служит вратами для огромного количества данных, попадающих в систему Big Data из различных источников. Основное назначение подсистемы фильтрации — отделить мусор от релевантной информации и, тем самым, подготовить данные для дальнейшей обработки внутри платформы Big Data.
Схема работы подсистемы фильтрации представлена на Рисунке 2.
Рисунок 2. Подсистема фильтрации
Обработка данных в подсистеме фильтрации предусматривает выполнение следующих процедур:
- Идентификация известных форматов данных или назначение форматов по умолчанию для неструктурированных данных
- Фильтрация входящей информации на предмет релевантности для данной организации. Релевантность оценивается на основании системы управления мастер данными (Master Data Management)
- Валидация и анализ данных
- Снижение шума включает очистку данных и минимизацию различных помех
- Трансформация предусматривает при необходимости разбивку наборов данных на составляющие, сведение данных, денормализацию и суммирование
- Сжатие данных уменьшает размер данных без потери результатов предшествующего анализа
- Интеграция обеспечивает выгрузку отфильтрованной информации на уровень хранения Hadoop.
Уровень хранения
Технологии Big Data предусматривают высокую степень распределения данных на уровне хранения. Распределенная система хранения не только обеспечивает отказоустойчивость, но и позволяет распараллелить обработку данных, что крайне важно при работе с объёмами Big Data.
Ключевой технологией хранения в мире Big Data является Hadoop. Hadoop представляет собой программную среду с открытым исходным кодом, которая обеспечивает распределённое хранение огромных объёмов данных (в масштабе петабайт) на недорогих компьютерах. С помощью Hadoop приложения Big Data взаимодействует с узлами хранения без непосредственного обращения к физическим серверам.
Hadoop состоит из двух основных компонент:
- Распределенная и в высокой степени масштабируемая файловая система HDFS (Hadoop Distributed File System)
- Подсистема MapReduce на уровне приложений, которая обеспечивает обработку запросов в пакетном режиме
HDFS построена по принципу однократной записи и многократного чтения (write-once-read-many) и имеет блочную структуру, в каждом блоке которой можно хранить файл или часть файла. Следует отметить, что к файлам HDFS нельзя обратиться напрямую, как мы это делаем в традиционных файловых системах. Для эффективной работы в HDFS нужно разрабатывать достаточно сложные специальные программы.
Для хранения данных, структурированных под определённую область (например, под документы), в системах Big Data применяют так называемые NoSQL (Not only SQL) СУБД. Выделяют четыре основных класса NoSQL СУБД:
- Базы данных с доступом к значению по ключу (key–value) относятся к простейшему типу NoSQL СУБД и могут хранить объекты любых типов.
- Базы данных на основе столбцов дают инструмент для индексирования неструктурированной информации и служит в основном в web–приложениях. Примером такой СУБД является Hbase.
- Документо–ориентированная СУБД позволяет хранить иерархические структуры данных. Например, СУБД MongoDB хранит объекты в формате JSON.
- Базы данных графов используются в ситуации, когда важны не столько сами данные, сколько связи между ними. Этот класс NoSQL СУБД может применяться в сетевом моделировании, а также при создании сервисов рекомендаций.
Физический уровень
Физический уровень представляет собой инфраструктуру для работы уровня хранения. Инфраструктура Big Data масштабируется горизонтально, что с одной стороны обеспечивает высокую надежность, а с другой стороны — дешевизну относительно традиционных вертикально интегрированных решений.
Высокая степень горизонтальной интеграции предусматривает применение архитектуры без разделения ресурсов (share-nothing architecture), когда узлы не имеют общих ресурсов и не конфликтуют за них. В системах Big Data это достигается за счёт того, что данные и функции для управления ими находятся на одном узле.
Уровень приложений
Уровень приложений, который также называют уровнем платформы, регулирует доступ к данным и управляет запросами. Ключевой технологией на данном уровне является MapReduce.
MapReduce представляет собой технологию для пакетного выполнения процедур по обработке больших объёмов данных. В независимости от конкретной реализации типовое решение MapReduce работает так:
- при поступлении запроса на обработку данных со стороны клиентского приложения функция Map разделяет исходные данные на куски и распределяет их по узлам системы с учётом требований к балансировке и отказоустойчивости
- по мере завершения задач на узлах функция Reduce получает результат обработки с каждого куска и объединяет все результаты в один, который и возвращает клиентскому приложению.
На уровне приложений могут применяться следующие инструменты:
- Hive представляет собой Хранилище данных, реализованное под Hadoop. Hive имеет sql–подобный интерфейс и может делать агрегацию для больших объёмов
- Pig — это скриптовый язык программирования, с помощью которого можно разрабатывать задания для MapReduce более эффективным образом, чем на языке Java. Следует отметить, что Pig предназначен для обработки больших наборов данных и на малых объёмах от него не стоит ждать хороших результатов.
- HBase представляет собой NoSQL СУБД, реализованную на основе столбцов. В отличие от аналогов HBase наиболее адаптирована для работы в Hadoop.
- Sqoop — это инструмент на базе командной строки, который предназначен для переноса больших объёмов данных из неструктурированного хранилища, в структурированное (например, в реляционную СУБД).
- ZooKeeper является координатором для различных экземпляров Hadoop. Он обеспечивает синхронизацию и защиту от сбоев для узлов системы.
Уровень мониторинга и информационной безопасности
Чтобы свести к минимуму время простоя для компонент Big Data и все системы в целом, необходима система мониторинга, реализованная по принципу автономности каждого из своих компонент. Наибольшей популярностью в среде Big Data пользуются системы мониторинга с открытым кодом Ganglia и Nagios.
Что касается безопасности, то организация эффективной системы защиты в распределённой системе Big Data является гораздо более сложной задачей, чем в традиционных системах. Основная трудность заключается в отслеживании всей системы целиком, когда логи формируются на многих узлах, а формирование конечного результата происходит без всякой возможности проверки со стороны пользователя.
В качестве минимальных мер безопасности рекомендуется применять:
- Проверку подлинности при обращении к узлам системы
- Защищённую связь между узлами
- Шифрование файлов в хранилище
- Сервис доверенных сертификатов
- Распределённое логирование на всех уровнях архитектуры
В статье использованы материалы из Nitin Sawant, Himanshu Shan — Big Data Application Architecture Q&A, Apress, 2013
Комментариев нет :
Отправить комментарий