Объёмы логов, биллинговых выгрузок и журналов транзакций растут быстрее, чем реляционная СУБД успевает их переваривать. Apache Hadoop переносит расчёт на дешёвые серверы и хранит данные там же, где их обрабатывает. Версия 0.20 уже стабильна и работает в продакшене у крупных операторов. Ниже – типовая архитектура кластера для обработки больших объёмов и построения аналитических хранилищ данных.

Роли узлов

Кластер делится на управляющие и рабочие узлы. Управляющих два, и они критичны.

NameNode держит метаданные файловой системы HDFS – дерево каталогов и карту блоков. Без него данные на дисках превращаются в нечитаемый набор байтов. В версии 0.20 NameNode остаётся единственной точкой отказа: резервного экземпляра нет, есть лишь Secondary NameNode, который сливает журнал правок в контрольную точку. Это не горячий резерв – путать их нельзя. Метаданные дублируйте на отдельный NFS-том, иначе потеря диска означает потерю кластера.

JobTracker распределяет задачи MapReduce по рабочим узлам, следит за прогрессом и перезапускает упавшие задачи. Тоже единственный экземпляр.

DataNode и TaskTracker живут на каждом рабочем узле. Первый хранит блоки данных, второй выполняет map- и reduce-операции прямо там, где лежат блоки. Принцип локальности данных – суть Hadoop: код едет к данным, а не наоборот.

Стартовая конфигурация для боевой нагрузки – два управляющих сервера и от пяти-шести рабочих. Меньше четырёх рабочих узлов смысла не имеет: накладные расходы съедают выигрыш.

HDFS и репликация

HDFS режет файл на блоки по 64 или 128 МБ и раскидывает их по DataNode с фактором репликации 3. Каждый блок лежит на трёх узлах, причём минимум на двух разных стойках. При выходе диска или сервера NameNode видит недобор реплик и дореплицирует блоки сам – администратор спит.

Не экономьте на сети между узлами. Map-фаза читает данные локально, но shuffle-фаза перед reduce гоняет промежуточные результаты по всему кластеру. Гигабит на узел – минимум; для тяжёлых джобов берите агрегированные каналы. Диски – обычные SATA без RAID: избыточность обеспечивает сама HDFS, а RAID лишь тормозит запись.

Эксплуатация и зрелость

Сырой MapReduce пишут на Java, но аналитикам это незачем. Поверх ставим Hive – он даёт SQL-подобный язык поверх данных в HDFS и снимает порог входа. Для потоковых преобразований берём Pig, для произвольного доступа по ключу – HBase.

Главное ограничение версии 0.20 – отсутствие штатной аутентификации до интеграции с Kerberos. По умолчанию Hadoop доверяет имени пользователя, которое присылает клиент. Для контура с персональными данными или гостайной это неприемлемо: настраивайте Kerberos и сетевую изоляцию с первого дня. Любая система, где компрометация одного звена открывает доступ ко всему, опасна – недавняя история со взломом RSA SecurID показала цену таких допущений наглядно.

Hadoop хорошо ложится на задачи, где данные приходят пакетами и считаются по расписанию: разбор журналов, агрегация статистики, подготовка витрин. Региональные информационные системы – например, инфраструктура вокруг порталов госуслуг в субъектах – генерируют именно такой поток событий, и складывать их в кластер дешевле, чем масштабировать СУБД.

Вывод

Hadoop 0.20 – зрелый инструмент пакетной обработки, но не «поставил и забыл». Закладывайте резервирование метаданных NameNode, сеть под shuffle и Kerberos с самого начала. Спроектированный так кластер снимает с реляционных систем тяжёлую аналитику и даёт линейный рост ёмкости – добавили стойку, получили мощность.