Изначально проект разработан на Java в рамках вычислительной парадигмы MapReduce, когда приложение разделяется на большое количество одинаковых элементарных заданий, которые выполняются на распределенных компьютерах (узлах) кластера и сводятся в единый результат.
В проект входят такие модули:
- Hadoop Common — общие утилиты, поддерживающие другие модули Hadoop
- Распределенная файловая система Hadoop (HDFS™) — распределенная файловая система, обеспечивающая высокоскоростной доступ к данным приложений
- Hadoop YARN — платформа для планирования заданий и управления ресурсами кластера
- Hadoop MapReduce — система на основе YARN для параллельной обработки больших наборов данных
Кластер HDFS включает следующие компоненты:
- Управляющий узел, узел имен или сервер имен (NameNode) — отдельный, единственный в кластере, сервер с программным кодом для управления пространством имен файловой системы, хранящий дерево файлов, а также мета-данные файлов и каталогов. NameNode — обязательный компонент кластера HDFS, который отвечает за открытие и закрытие файлов, создание и удаление каталогов, управление доступом со стороны внешних клиентов и соответствие между файлами и блоками, дублированными (реплицированными) на узлах данных. Сервер имён раскрывает для всех желающих расположение блоков данных на машинах кластера.
- Secondary NameNode — вторичный узел имен, отдельный сервер, единственный в кластере, который копирует образ HDFS и лог транзакций операций с файловыми блоками во временную папку, применяет изменения, накопленные в логе транзакций к образу HDFS, а также записывает его на узел NameNode и очищает лог транзакций. Secondary NameNode необходим для быстрого ручного восстановления NameNode в случае его выхода из строя.
- Узел или сервер данных (DataNode, Node) — один их множества серверов кластера с программным кодом, отвечающим за файловые операции и работу с блоками данных. DataNode — обязательный компонент кластера HDFS, который отвечает за запись и чтение данных, выполнение команд от узла NameNode по созданию, удалению и репликации блоков, а также периодическую отправку сообщения о состоянии (heartbeats) и обработку запросов на чтение и запись, поступающих от клиентов файловой системы HDFS. Стоит отметить, что данные проходят с остальных узлов кластера к клиенту мимо узла NameNode.
- Клиент (client) — пользователь или приложение, взаимодействующий через специальный интерфейс (API — Application Programming Interface) с распределенной файловой системой. При наличии достаточных прав, клиенту разрешены следующие операции с файлами и каталогами: создание, удаление, чтение, запись, переименование и перемещение. Создавая файл, клиент может явно указать размер блока файла (по умолчанию 64 Мб) и количество создаваемых реплик (по умолчанию значение равно 3-ем).
Фундаментальная идея YARN состоит в том, чтобы разделить функции управления ресурсами и планирования/мониторинга заданий на отдельные демоны. Идея состоит в том, чтобы иметь глобальный ResourceManager ( RM ) и ApplicationMaster для каждого приложения ( AM ). Приложение представляет собой либо одно задание, либо группу DAG заданий.
ResourceManager и NodeManager образуют структуру вычисления данных. ResourceManager — это высшая инстанция, которая распределяет ресурсы между всеми приложениями в системе. NodeManager — это агент инфраструктуры для каждой машины, который отвечает за контейнеры, отслеживая использование их ресурсов (процессор, память, диск, сеть) и сообщая об этом диспетчеру ресурсов/планировщику.
ApplicationMaster для каждого приложения, по сути, представляет собой библиотеку, специфичную для платформы, и ему поручено согласовывать ресурсы с ResourceManager и работать с NodeManager(s) для выполнения и мониторинга задач.