Ни одно обсуждение 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.

  1. Можно быстро сохранять и обрабатывать большие объемы разнообразных данных. Объемы данных, генерируемые Интернетом вещей и социальными сетями, постоянно растут. Это делает Hadoop ключевым инструментом для работы с подобными источниками данных большого объема.

  2. Distributed File-System обеспечивает Hadoop высокой вычислительной мощностью, необходимой для быстрых вычислений.

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

  4. Можно хранить разнообразные структурированные или неструктурированные данные без предварительной обработки (включая изображения и видео).

  5. Фреймворк работает на обычных серверах, которые более эффективны с точки зрения затрат, чем специальные выделенные хранилища.

  6. При увеличении объема обрабатываемых данных можно добавлять узлы, что позволяет системе масштабироваться. С точки зрения администрирования это делается очень просто.

Ограничения Hadoop

Каким бы хорошим ни был Hadoop, у него есть ряд ограничений. Среди них:

  1. MapReduce хорошо подходит для обработки простых запросов. Интерактивные и итеративные задачи решаются не так эффективно, как независимые, требующие простой сортировки (sort) и тасовки (shuffle). Итеративные задачи решаются в несколько отображений (map) и сверток (reduce). В результате между этапами Map и Reduce создается множество файлов, что делает его неэффективным при сложной аналитике.

  2. Не так уж и много Java-программистов, обладающих необходимыми знаниями MapReduce. Это привело к созданию SQL-решений поверх Hadoop, так как программистов, владеющих SQL, найти проще.

  3. Hadoop — сложное приложение, требующее знаний по настройке его безопасности. Также в Hadoop отсутствует шифрование хранилищ и каналов связи.

  4. В Hadoop нет полного набора инструментов, необходимых для обработки метаданных, управления, очистки и обеспечения качества данных.

  5. Сложная архитектура делает Hadoop непригодным для обработки небольших объемов данных, поскольку он не может эффективно работать с произвольным чтением небольших файлов.

  6. Hadoop почти полностью написан на Java — платформе которая часто подвергается атакам со стороны киберпреступников. Поэтому есть значительные риски безопасности.

Что такое MongoDB

MongoDB — это гибкая и масштабируемая документноориентированная NoSQL СУБД, которая поддерживает различные модели данных и хранит данные в наборах ключ-значение. Она была разработана как решение для работы с большими объемами распределенных данных, которые не могут эффективно обрабатываться в реляционных моделях, содержащих строки и таблицы. Как и Hadoop, MongoDB бесплатная и с открытым исходным кодом.

  1. Ключевые особенности MongoDB:

  2. Богатый язык запросов, поддерживающий текстовый поиск, агрегирование и CRUD-операции.

  3. По сравнению с реляционными базами данных требует меньше операций ввода/вывода из-за встраиваемых моделей данных (embedded data model). Для ускорения выполнения запросов есть поддержка индексов.

  4. Отказоустойчивость обеспечивается через репликацию наборов данных. Репликация обеспечивает хранение данных на нескольких серверах, что создает избыточность и высокую доступность.

  5. Поддержка механизма шардинга для горизонтального масштабирования. Позволяет с меньшими затратами обрабатывать увеличивающийся объем данных (по сравнению с вертикальными способами масштабирования).

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

Виды движков хранения:

  • WiredTiger

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

  • In-Memory Storage Engine

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

  • MMAPv1 Storage Engine 

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

Почему стоит использовать MongoDB?

Сегодня бизнесу требуется быстрый и гибкий доступ к данным, чтобы понимать текущую ситуацию и принимать наиболее эффективные решения. MongoDB лучше подходит для решения этих новых задач, связанных с данными. Аргументы в пользу использования MongoDB сводятся следующим:

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

  2. Язык запросов, используемый MongoDB, поддерживает динамические запросы.

  3. Схема в MongoDB неявная, т.е. вам не нужно заранее ее проектировать. Это упрощает представление наследования и полиморфизма в базе данных.

  4. Легко реализовать горизонтальное масштабирование.

Ограничения MongoDB

Хотя MongoDB предоставляет отличные возможности для решения многих проблем, связанных с Big Data, она также имеет ряд ограничений, таких как:

  1. Необходимо вручную обрабатывать соединения (JOIN), что может привести к снижению производительности.

  2. Следствием отсутствия JOIN является также то, что MongoDB потребляет много памяти, поскольку все файлы должны быть считаны с диска в память.

  3. Размер документа не может быть больше 16 МБ.

  4. Вложенность ограничена и не может превышать 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. РЕГИСТРАЦИЯ