3) эффективность применения модели MapReduce снижается при малом количестве машин в кластере; 4) невозможно предсказать окончание стадии Map => задержка выполнения Map-задания ведёт к задержке выполнения задачи целиком; 5) сбой узла JobTracker приводит к простою всего кластера. +------+ +------++ + - - - - + [Client]+ Secondary ^ | |Name Node| | v - - - - - | [NameNode] ^ | ^ ^....Metadata.... |+----|-----+ replication ||+--------+| +-----------+ |||DataNode|| | +--------+| +>| +------+| |[DataNode]+| ||| |Blocks|| |Rack2 | ||+-+------+| +-----------+ || | +>[D N 2] | +-----------+ || | | | +--------+| || | |[DataNode]+| || | | |Rack3 | +>[D Node N]| +-----------+ |Rack1 ^ Data Replication^ | +-----------------+ Данные, которые обрабатываются на узлах DataNode, разбиваются на блоки. HDFS -- это распределённая файловая система, которая обеспечивает высокоскоростной доступ к данным приложения. HDFS является иерархической файловой системой, в HDFS присутствует поддержка вложения каталогов, в каталоге, соответственно, может располагаться 0 или более файлов, а также любое количество подкаталогов. Компоненты HDFS: 1) узел имён NameNode --- это программный код, который в общем случае выполняется на выделенной машине экземпляра HDFS и который отвечает за файловые операции (отвечает за работу с метаданными) Метаданные --- данные о данных (каталоги, базы данных, различные реестры), которые содержат сведения о составе данных, содержании данных, структуре, форматах и форме представления, условиях доступа, также информацию о статусе, происхождении и т. д. 2) узлы данных DataNode --- программный код, который выполняется также на выделенной машине экземпляра HDFS и отвечает за операции уровня файлов. HDFS хранит файлы поблочно. Блоки в HDFS распределены между узлами данных DataNode. Все блоки, кроме последнего блока файла, имеют одинаковый размер. Кроме того, блок может быть распределён на нескольких узлах DataNode. HDFS воспринимает выход из строя какого-нибудь узла данных как норму, а не как исключение. Также для обеспечения отказоустойчивости все данные в HDFS реплицируются настраиваемое количество раз. В HDFS присутствует также защита от копирования повреждённых данных; это происходит при помощи хранения контрольных сумм в отдельном скрытом файле. В HDFS также присутствует копирование метаданных во вторичный узел имён. Каждый узел DataNode через определённые интервалы времени отправляет диагностические сообщения узлу имён. Присутствует логирование операций над файлами в специальный журнал узла имён. В HDFS также применяется принцип WORM (Write Once --- Read Many). HDFS оптимизирован под потоковую передачу данных. Также в HDFS присутствует такое понятие, как "сжатые данные", что, соответственно, снижает нагрузку на каналы передачи данных. Репликация данных происходит в асинхронном режиме. Все метаданные узла NameNode также хранятся в оперативной памяти. Узел имён NameNode отвечает за файловые операции, такие как открытие и закрытие файлов, создание, удаление каталогов, а также за выполнение следующих функций: 1) управление пространством имён файловой системы; 2) управление доступом со стороны внешних клиентов; 3) соответствие между файлами и реплицированными на узлах данных блоками. HDFS поддерживает вторичный узел имён (NameNode). Функции Secondary NameNode: 1) этот узел копирует образ HDFS, расположенный в файле FsImage, и лог транзакций операций с файловыми блокамм (EditLog) во временную папку; 2) применяются изменения, накопленные в логе транзакций, к образу HDFS; 3) записывает новый образ FsImage непосредственно на узел NameNode, после чего происходит очистка EditLog. Узел данных DataNode отвечает за операции уровня файла, а именно: запись и чтение данных, выполнение команд создания, удаления и репликации блоков, полученных от NameNode. DataNode отвечает за следующие действия: 1) периодическая отправка сообщений о состоянии (heart-beat-сообщения); 2) обработка запросов на чтение и запись, поступающих от клиентов файловой системы HDFS: данные проходят с остальных машин кластера к клиенту мимо узла NameNode. В роли клиента может выступать любое приложение, а также клиентом могут выступать пользователи, которые взаимодействуют с файловой системой HDFS с помощью специальных API-функций. Клиенту при наличии прав достаточных прав доступа разрешены следующие операции, такие как создание, удаление, переименование или перемещение; эти операции могут применяться как к файлам, так и к каталогам. Существенным отличием работы клиента с HDFS от обычной файловой системы заключается в том, что при создании файла клиент может явно указать размер блока файла (по умолчанию --- 64 МБ) и количество создаваемых реплик (по умолчанию --- 3). Взаимодействие компонентов HDFS: взаимодействие узлов данных и клиента осуществляется по протоколам, которые основываются на протоколах TCP/IP. Клиент создаёт соединение через специально сконфигурированный для взаимодействия TCP-порт на целевом узле NameNode. Взаимодействие клиента с узлом имён NameNode происходит по протоколу ClientProtocol, который основывается на протоколе TCP/IP. Узлы DataNode (узлы данных) взаимодействуют с NameNode, используя протокол dataNodeProtocol, который также основывается на протоколе TCP/IP. И ClientProtocol, и DataNodeProtocol, можно сказать, "обёрнуты" в RPC. Узел имён NameNode не инициализирует вызовы RPC, а, соответственно, только отвечает на RPC-вызовы узлов DataNode и клиента. Файловые операции в HDFS: отсутствует операция модификации файла; модификация в HDFS не поддерживается по причинам, связанным с архитектурными особенностями этой файловой системы, особенно с вопросами производительности и блокировками; клиент может явно указать размер блока файла; клиент может указывать количество реплик; DataNode отвечают за операции с конкретными файлами. Архитектурные решения, которые применяются в HDFS для создания файлов: изначально клиент кэширует необходимую для записи информацию где-то во временном или постоянном хранилище (по его выбору). После того, как объём информации достигает определённого размера блока в HDFS, клиент отправляет на узел имён запрос на создание файла. Узел имён NameNode отвечает клиенту, т. е. отправляет идентификатор узла данных и блок назначения, на которых будет вестись запись. Также в этот момент узел имён NameNode уведомляет другие узлы данных, на которые будут писаться реплики файлового блока.