Объёмы логов, биллинговых выгрузок и журналов транзакций растут быстрее, чем реляционная СУБД успевает их переваривать. 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 с самого начала. Спроектированный так кластер снимает с реляционных систем тяжёлую аналитику и даёт линейный рост ёмкости – добавили стойку, получили мощность.