Ни одно обсуждение Big Data не будет полным без упоминания Hadoop и MongoDB: двух наиболее популярных инструментов, доступных сегодня. Из-за обилия информации по ним, в том числе об их преимуществах и недостатках, не всегда легко сделать правильный выбор. Каждый из них силен в своей области, но что подойдет вам и вашей организации? Эта статья поможет сделать правильный выбор.
Что такое Hadoop
Hadoop — это набор программ с открытым исходным кодом, предназначенный для обработки Big Data. В его состав входят несколько компонент, каждый из которых выполняет определенную задачу, связанную с аналитикой Big Data.
В состав Hadoop входят:
Distributed File-System
MapReduce
Hadoop Common
Hadoop YARN
Distributed File-System
Это один из двух наиболее важных компонентов Hadoop. Distributed File-System (DFS, распределенная файловая система) важна, потому что:
Позволяет легко хранить и обмениваться данными, а также получать к ним доступ через обширную сеть связанных серверов.
Это позволяет работать с данными так, как будто вы работаете с локальным хранилищем.
В отличие от других вариантов хранилищ, таких как расшаренные сетевые папки, у вас остается доступ к данным даже в офлайне.
Hadoop DFS не ограничивается ОС хоста. Вы можете получить к ней доступ с любого компьютера или поддерживаемой ОС.
MapReduce
MapReduce — второй из двух наиболее важных компонентов, позволяющий работать с данными. Он выполняет две задачи:
Map (отображение) — преобразование данных в формат, который можно легко анализировать. Это достигается путем фильтрации и сортировки.
Reduce (свертка) — следует за map. При reduce выполняются математические операции (например, подсчет количества клиентов старше 21 года) на данных map.
Hadoop Common
Hadoop Common — это набор инструментов (библиотек и утилит), которые используются тремя другими модулями Hadoop. Здесь содержатся скрипты и модули, необходимые для запуска Hadoop, а также исходный код, документация и раздел, посвященный участию в сообществе Hadoop.
Hadoop YARN
Это архитектурный фреймворк для управления ресурсами и планирования заданий. YARN предоставляет разработчикам эффективный способ разработки приложений и управления большими наборами данных. С помощью Hadoop YARN можно реализовать интерактивную, потоковую и пакетную обработку.
Почему стоит использовать Hadoop?
Теперь, когда мы знаем, что такое Hadoop, следующий вопрос, на который стоит ответить — ПОЧЕМУ Hadoop. Мы выделили шесть преимуществ Hadoop.
Можно быстро сохранять и обрабатывать большие объемы разнообразных данных. Объемы данных, генерируемые Интернетом вещей и социальными сетями, постоянно растут. Это делает Hadoop ключевым инструментом для работы с подобными источниками данных большого объема.
Distributed File-System обеспечивает Hadoop высокой вычислительной мощностью, необходимой для быстрых вычислений.
Hadoop обрабатывает сбои оборудования, перенаправляя задания на другие узлы и автоматически поддерживая несколько копий данных.
Можно хранить разнообразные структурированные или неструктурированные данные без предварительной обработки (включая изображения и видео).
Фреймворк работает на обычных серверах, которые более эффективны с точки зрения затрат, чем специальные выделенные хранилища.
При увеличении объема обрабатываемых данных можно добавлять узлы, что позволяет системе масштабироваться. С точки зрения администрирования это делается очень просто.
Ограничения Hadoop
Каким бы хорошим ни был Hadoop, у него есть ряд ограничений. Среди них:
MapReduce хорошо подходит для обработки простых запросов. Интерактивные и итеративные задачи решаются не так эффективно, как независимые, требующие простой сортировки (sort) и тасовки (shuffle). Итеративные задачи решаются в несколько отображений (map) и сверток (reduce). В результате между этапами Map и Reduce создается множество файлов, что делает его неэффективным при сложной аналитике.
Не так уж и много Java-программистов, обладающих необходимыми знаниями MapReduce. Это привело к созданию SQL-решений поверх Hadoop, так как программистов, владеющих SQL, найти проще.
Hadoop — сложное приложение, требующее знаний по настройке его безопасности. Также в Hadoop отсутствует шифрование хранилищ и каналов связи.
В Hadoop нет полного набора инструментов, необходимых для обработки метаданных, управления, очистки и обеспечения качества данных.
Сложная архитектура делает Hadoop непригодным для обработки небольших объемов данных, поскольку он не может эффективно работать с произвольным чтением небольших файлов.
Hadoop почти полностью написан на Java — платформе которая часто подвергается атакам со стороны киберпреступников. Поэтому есть значительные риски безопасности.
Что такое MongoDB
MongoDB — это гибкая и масштабируемая документноориентированная NoSQL СУБД, которая поддерживает различные модели данных и хранит данные в наборах ключ-значение. Она была разработана как решение для работы с большими объемами распределенных данных, которые не могут эффективно обрабатываться в реляционных моделях, содержащих строки и таблицы. Как и Hadoop, MongoDB бесплатная и с открытым исходным кодом.
Ключевые особенности MongoDB:
Богатый язык запросов, поддерживающий текстовый поиск, агрегирование и CRUD-операции.
По сравнению с реляционными базами данных требует меньше операций ввода/вывода из-за встраиваемых моделей данных (embedded data model). Для ускорения выполнения запросов есть поддержка индексов.
Отказоустойчивость обеспечивается через репликацию наборов данных. Репликация обеспечивает хранение данных на нескольких серверах, что создает избыточность и высокую доступность.
Поддержка механизма шардинга для горизонтального масштабирования. Позволяет с меньшими затратами обрабатывать увеличивающийся объем данных (по сравнению с вертикальными способами масштабирования).
Поддержка нескольких движков хранения, что позволяет выбирать оптимальный в зависимости от типа рабочей нагрузки.
Виды движков хранения:
WiredTiger
Используется по умолчанию для версий 3.2 и выше. Справляется с большинством типов рабочих нагрузок и включает в себя возможности создания контрольных точек, сжатия и конкурентные операции при записи на уровне документа. Последнее позволяет редактировать документы одновременно нескольким пользователям.
In-Memory Storage Engine
Этот движок хранит документы в оперативной памяти, а не на диске, что повышает предсказуемость задержек при обработке данных.
MMAPv1 Storage Engine
Это самый старый движок и работает только в версии 3.0 и более ранних. Он хорошо справляется с рабочими нагрузками, включающих массовые обновления, чтения и вставки.
Почему стоит использовать MongoDB?
Сегодня бизнесу требуется быстрый и гибкий доступ к данным, чтобы понимать текущую ситуацию и принимать наиболее эффективные решения. MongoDB лучше подходит для решения этих новых задач, связанных с данными. Аргументы в пользу использования MongoDB сводятся следующим:
При использовании реляционных баз данных вам потребуется использовать несколько таблиц. Mongo позволяет представить данные в виде одного объекта, что особенно удобно для неизменяемых данных.
Язык запросов, используемый MongoDB, поддерживает динамические запросы.
Схема в MongoDB неявная, т.е. вам не нужно заранее ее проектировать. Это упрощает представление наследования и полиморфизма в базе данных.
Легко реализовать горизонтальное масштабирование.
Ограничения MongoDB
Хотя MongoDB предоставляет отличные возможности для решения многих проблем, связанных с Big Data, она также имеет ряд ограничений, таких как:
Необходимо вручную обрабатывать соединения (JOIN), что может привести к снижению производительности.
Следствием отсутствия JOIN является также то, что MongoDB потребляет много памяти, поскольку все файлы должны быть считаны с диска в память.
Размер документа не может быть больше 16 МБ.
Вложенность ограничена и не может превышать 100 уровней.
Что использовать для Big Data: MongoDB или Hadoop?
Можно посмотреть, что используют крупные компании, и попробовать последовать их примеру. Например, eBay, SAP, Adobe, LinkedIn, McAfee, MetLife и Foursquare используют MongoDB. С другой стороны, Microsoft, Cloudera, IBM, Intel, Teradata, Amazon, Map R Technologies — известные пользователи Hadoop.
В конечном счете и Hadoop и MongoDB являются популярными решениями для обработки Big Data. Хотя у них много общего (например, открытый исходный код, NoSQL, отсутствие схемы и Map-Reduce), их подход к обработке и хранению данных отличается. Именно эти различия помогут нам сделать выбор между Hadoop и MongoDB.
Ни один, ни другой вариант не решит все ваши проблемы. Теорема CAP помогает выявить узкие места в приложениях, указывая на то, что распределенные системы могут оптимально работать только на двух из трех фронтов: согласованность (consistency), доступность (availability) и устойчивость к разделению (partition tolerance). При выборе инструмента для работы с Big Data стоит выбирать систему с двумя наиболее важными для вас свойствами.
Что насчет реляционных СУБД?
И у Hadoop и у MongoDB есть преимущества по сравнению с традиционными реляционными системами управления базами данных (РСУБД), которые включают в себя параллельную обработку, масштабируемость, обработку больших объемов агрегированных данных, архитектуру MapReduce и экономичность (благодаря открытому исходному коду). Кроме того, обработка данных осуществляется на множестве узлов, кластерах, что позволяет экономить на стоимости оборудования.
Однако в контексте сравнения их с РСУБД, у каждой из платформ есть некоторые преимущества перед другой. Обсудим их подробнее.
Замена РСУБД
MongoDB — это гибкая платформа, которая может стать подходящей заменой РСУБД. Hadoop не заменяет РСУБД, а скорее дополняет ее, помогая архивировать данные.
Работа с памятью
MongoDB написана на C++, что позволяет ей эффективно работать с памятью. Hadoop — это набор программного обеспечения на основе Java, который предоставляет платформу для хранения, извлечения и обработки данных.
Импорт и хранение данных
Данные в MongoDB хранятся в JSON, BSON или в двоичном виде, и все поля могут быть запрошены, проиндексированы, агрегированы или реплицированы за раз. Кроме того можно импортировать данные в форматах JSON или CSV. Hadoop поддерживает различные форматы данных, что устраняет необходимость преобразования данных при их обработке.
Big Data
MongoDB не проектировалась для работы с Big Data. Hadoop, с другой стороны, был создан исключительно для этой цели. Таким образом, последний отлично подходит для пакетной обработки и выполнения длительных ETL-заданий. Также с помощью Hadoop удобно обрабатывать логи из-за их большого размера и постоянного увеличения. Реализация MapReduce в Hadoop более эффективна, чем в MongoDB, что снова делает его более эффективным решением для анализа больших наборов данных.
Обработка данных в реальном времени
MongoDB лучше справляется с анализом данных в реальном времени, а также из-за своего формата хранения, более удобна при работе с данными на фронтенде. Кроме того, геопространственные индексы делают MongoDB идеальным решением для сбора и анализа GPS и географических данных в реальном времени. С другой стороны, Hadoop не очень хорош в обработке данных в реальном времени. Но если вы используете Hadoop SQL-подобные запросы в Hive, вы можете делать запросы намного быстрее и эффективнее, чем JSON.
Резюме
У каждой компании свои уникальные потребности и проблемы, поэтому универсального решения не существует. Выбирать Hadoop или MongoDB вы должны исходя из ваших требований. Но как только вы сделаете этот выбор, убедитесь, что вы и ваши коллеги хорошо разбираетесь в этих технологиях.
Материал подготовлен в рамках курса "MongoDB".
Всех желающих приглашаем на открытый урок «Работа с геоданными в MongoDB используя Python». На уроке нам предстоит разобрать, как загрузить Geo-обьекты в MongoDB и получать их, а также отобразить их в браузере, используя Python. Также рассмотрим особенности работы Geo-индексов и соответствующие возможности MongoDB. РЕГИСТРАЦИЯ