6
Развёртывание экземпляра HDFS предусматривает наличие центрального
узла имён (name node), хранящего метаданные файловой системы и
метаинформацию о распределении блоков, и серии узлов данных (data node),
непосредственно хранящих блоки файлов. Узел имён отвечает за обработку
операций уровня файлов и каталогов — открытие и закрытие файлов,
манипуляция с каталогами, узлы данных непосредственно отрабатывают
операции по записи и чтению данных. Узел имён и
узлы данных снабжаются
веб-серверами, отображающими текущий статус узлов и позволяющими
просматривать содержимое файловой системы.
HDFS является неотъемлемой частью проекта, однако, Hadoop
поддерживает работу и с другими распределёнными файловыми системами без
использования HDFS, поддержка Amazon S3 и CloudStore реализована в
основном дистрибутиве. С другой стороны, HDFS может использоваться не
только для запуска MapReduce-заданий, но и как распределённая файловая
система
общего назначения, в частности, поверх неё реализована
распределённая NoSQL-СУБД HBase, в её среде работает масштабируемая
система машинного обучения Apache Mahout.
YARN (англ. Yet Another Resource Negotiator — «ещё один ресурсный
посредник») — модуль, появившийся с версией 2.0 Hadoop, отвечающий за
управление ресурсами кластеров и планирование заданий. Если в предыдущих
выпусках эта функция была интегрирована в модуль MapReduce, где была
реализована единым компонентом (JobTracker), то в YARN функционирует
логически
самостоятельный
демон — планировщик
ресурсов
(ResourceManager), абстрагирующий все вычислительные
ресурсы кластера и
управляющий их предоставлением приложениям распределённой обработки.
Работать под управлением YARN могут как MapReduce-программы, так и
любые
другие
распределённые
приложения,
поддерживающие
соответствующие программные интерфейсы. YARN обеспечивает возможность
параллельного выполнения нескольких различных задач в рамках кластера и их
изоляцию (по принципам мультиарендности). Разработчику распределённого
приложения необходимо реализовать специальный класс управления
приложением (ApplicationMaster), который отвечает за координацию заданий в
рамках тех ресурсов, которые предоставит планировщик ресурсов;
планировщик ресурсов же отвечает за создание экземпляров класса управления
приложением и взаимодействия с ним через соответствующий сетевой
протокол.
Hadoop MapReduce — программный
каркас для программирования
распределённых вычислений в рамках парадигмы MapReduce. Разработчику
приложения для Hadoop MapReduce необходимо реализовать базовый
обработчик, который на каждом вычислительном узле кластера обеспечит
преобразование исходных пар «ключ — значение» в промежуточный набор пар
«ключ — значение» (класс, реализующий интерфейс Mapper, назван по
функции высшего порядка Map), и обработчик, сводящий промежуточный
набор пар в окончательный, сокращённый набор (свёртку, класс, реализующий
интерфейс Reducer). Каркас передаёт на вход свёртки отсортированные выводы
7
от базовых обработчиков, сведе́ние состоит из трёх фаз — shuffle (тасовка,
выделение нужной секции вывода), sort (сортировка,
группировка по ключам
выводов от распределителей — досортировка, требующаяся в случае, когда
разные атомарные обработчики возвращают наборы с одинаковыми ключами,
при этом правила сортировки на этой фазе могут быть заданы программно и
использовать какие-либо особенности внутренней структуры ключей) и
собственно reduce (свёртка списка) — получения результирующего набора. Для
некоторых видов обработки свёртка не требуется, и каркас возвращает в этом
случае набор отсортированных пар, полученных базовыми обработчиками.
Hadoop MapReduce позволяет создавать задания как с базовыми
обработчиками, так и со свёртками, написанными без использования Java:
утилиты Hadoop streaming позволяют использовать в
качестве базовых
обработчиков и свёрток любой исполняемый файл, работающий со
стандартным вводом-выводом операционной системы (например, утилиты
командной оболочки UNIX), есть также SWIG-совместимый прикладной
интерфейс программирования Hadoop pipes на C++. Также, в состав
дистрибутивов Hadoop входят реализации различных конкретных базовых
обработчиков и свёрток, наиболее типично используемых в распределённой
обработке.
Достарыңызбен бөлісу: