Что такое Hadoop?

Hadoop – это проект с открытым исходным кодом, находящийся под управлением Apache Software Foundation (http://hadoop.apache.org/). Hadoop используется для надежных, масштабируемых и распределенных вычислений, но может также применяться и как хранилище файлов общего назначения, способное вместить петабайты данных. Многие компании используют Hadoop в исследовательских и производственных целях.
Hadoop состоит из двух ключевых компонентов:
— Распределенная файловая система Hadoop (англ. HDFS), которая отвечает за хранение данных на кластере Hadoop;
— Система MapReduce, предназначенная для вычислений и обработки больших объемов данных на кластере.
На основе этих ключевых компонентов создано несколько подпроектов, таких как Pig, Hive, HBase и т.д.
MapReduce
MapReduce – это модель программирования и каркас для написания приложений, предназначенных для высокоскоростной обработки больших объемов данных на больших параллельных кластерах вычислительных узлов:
— обеспечивает автоматическое распараллеливание и распределение задач;
— имеет встроенные механизмы сохранения устойчивости и работоспособности при сбое отдельных эелементов;
— обеспечивает чистый уровень абстракции для программистов.
HDFS
HDFS, или Распределенная файловая система Hadoop – это основная система хранения данных, используемая приложениями Hadoop. HDFS многократно копирует блоки данных и распределяет эти копии по вычислительным узлам кластера, тем самым обеспечивая высокую надежность и скорость вычислений:
— Данные распределяются по нескольким машинам во время загрузки.
— HDFS оптимизирована больше для выполнения потоковых считываний файлов, нежели для нерегулярных, произвольных считываний.
— Файлы в системе HDFS пишутся однократно и внесение никаких произвольных записей в файлы не допускается.
— Приложения могут считывать и писать файлы Распределенной файловой системы напрямую через программный интерфейс Java.
Hadoop и корпоративные системы

Системы управления реляционными базами данных (СУРБД, или англ. RDBMS) используются в системах больших компаний по стандартной схеме:
— Интерактивная система СУРБД обрабатывает запросы, поступающие с веб-сайта или других пользовательских приложений.
— Затем данные извлекаются из реляционной базы и загружаются в хранилище данных для дальнейшей обработки и архивации.
— Данные обычно денормализуются в OLAP-куб.
К сожалению, современные системы СУРБД не могут вместить все то огромное количество данных, которое создается в больших компаниях, и тогда возникает необходимость идти на компромисс: данные либо только частично копируются в СУРБД, либо удаляются через определенное время. Необходимость таких компромиссных решений отпадает, если в качестве промежуточного слоя между интерактивной базой данных и хранилищем данных используется Hadoop:
— Производительность обработки данных возрастает пропорционально увеличению объема хранилища данных, в то время как в высокопроизводительных серверах рост количества данных и изменение производительности непропорциональны.
— При использовании Hadoop, чтобы повысить производительность обработки, достаточно просто добавить новые узлы в хранилище данных.
— Hadoop может хранить и обрабатывать многие петабайты данных.
Однако Hadoop имеет ряд серьезных ограничений, и потому Hadoop не может использоваться в качестве операционной базы данных:
— Для выполнения самой быстрой задачи в Hadoop все же требуется несколько секунд.
— Не допускается внесение никаких изменений в данные, которые хранятся в системе HDFS.
— Hadoop не поддерживает транзакции.
Hadoop и СУРБД
Системы управления реляционными базами данных (СУРБД) имеют много достоинств:
— они способны оперировать сложными транзакциями;
— в них могут обрабатываться сотни тысяч запросов в секунду;
— результаты выдаются в реальном времени;
— применяется простой, но эффективный язык запросов.
Однако у СУРБД есть и слабые стороны:
— Схема данных определяется до того, как данные импортируются;
— Предельная вместимость СУРБД достигает сотен терабайтов;
— Предельное количество данных в одном запросе составляет десятки терабайтов.
Hadoop и файловые хранилища

Бизнес-данные больших компаний часто хранятся на больших файловых серверах типа NetApp, EMC и т.п., которые обеспечивают быстрый и произвольный доступ к данным и могут поддерживать одновременно большое количество клиентских приложений. Однако когда речь идет о хранении петабайтов данных, цена за хранение одного терабайта данных может сильно возрастать. В этом случае Hadoop представляет собой действительно удачную альтернативу файловым хранилищам, с условием, что произвольный доступ к данным возможно заменить на последовательные считывания, а изменения данных допустимо ограничить только присоединенными записями.
Hive и Pig
MapReduce является очень мощным инструментом обработки данных, однако он может оказаться довольно сложным для создания и поддержания, в то время как во многих компаниях работают бизнес-аналитики, которые хорошо умеют писать запросы на языке SQL, но не умеют писать код на Java. Также, во многих организациях есть программисты, умеющие писать код на скриптовых языках. Hive и Pig – это два проекта, которые разрабатывались независимо друг от друга и которые предназначены для того, чтобы помочь таким аналитикам и программистам эффективно использовать MapReduce для анализа больших массивов данных.
Hive – это надстройка над Hadoop для того, чтобы облегчить выполнение таких задач, как суммирование данных, непрограммируемые запросы и анализ больших наборов данных:
— Hive может быть использован теми, кто знает язык SQL.
— Hive создает задания MapReduce, которые исполняются на кластере Hadoop.
— Определения таблиц в Hive надстраиваются над данными в HDFS.
Pig – это платформа, предназначенная для анализа больших наборов данных и состоящая из языка высокого уровня для написания программ анализа данных и инфраструктуры для запуска этих программ. Язык характеризуется относительно простым синтаксисом. Написанные сценарии скрыто преобразуются в задачи MapReduce, которые исполняются на кластере Hadoop.
HBase
HBase — это колоночная база данных, расположенная поверх HDFS, которая способна вместить огромные массивы данных (от гигабайтов до петабайтов данных). HBase используется тогда, когда нужен произвольный доступ к данным, хранящимся в HDFS, в реальном времени и с правом записи и чтения.
Модель доступа к данным в HBase имеет следующие ограничения:
— поиск ряда по одному ключу;
— не поддерживаются транзакции;
— доступны только операции по одной строке.