Hadoop Distributed File System
Современные тенденции в развитии web-приложений и экспоненциальный рост информации, ими обрабатываемых, привел к потребности в появлении файловых систем ориентированных на обеспечение высокой производительности, масштабируемости, надежности и доступности. В стороне от данной проблемы не могли остаться такие гиганты поисковой индустрии, как Google и Yahoo.
Специфика приложений и вычислительной инфраструктуры Google, построенной на огромном количестве недорогих серверов, с присущими им постоянными отказами, привело к разработке собственной закрытой распределенной файловой системы Google File System (GFS). Данная система нацелена на автоматическое восстановление после сбоев, высокую отказоустойчивость, высокую пропускную способность при доступе к данным в потоковом режиме. Система предназначена для работы с большими объемами данных, подразумевающих большие размеры хранимых файлов, поэтому GFS оптимизирована для соответствующих операций. В частности, в целях упрощения реализации и повышения эффективности GFS не реализует стандартный POSIX-интерфейс.
Ответом GFS стал open source проект Hadoop, с его Hadoop Distributed File System. Проект активно поддерживается и развивается компанией Yahoo (18 человек). Проведем сравнительный анализ терминов, используемых в данных системах, установим их соответствие и остановимся подробнее на HDFS:
| HDFS | GFS | |
| Главный сервер | NameNode | Master |
| Подчиненные сервера | DataNode Servers | Chunk Servers |
| Операции Append и Snapshot | — | + |
| Автоматическое востановление после отказа главного сервера | — | + |
| Язык реализации | Java | C++ |
HDFS — распределенная файловая система, используемая в проекте Hadoop. HDFS-кластер в первую очередь состоит из NameNоde-сервера и DataNode-серверов, которые хранят непосредственно данные. NameNode-сервер управляет пространством имен файловой системы и доступом клиентов к данным. Чтобы разгрузить NameNode-сервер, передача данных осуществляется только между клиентом и DataNode-сервером.
Secondary NameNode:
Основной NameNode-сервер фиксирует все транзакции, связанные с изменением метаданных файловой системы, в log-файле, называемом EditLog. При запуске основного NameNode-сервера, он считывает образ HDFS (расположенный в файле FsImage) и применяет к нему все изменения, накопленные в EditLog. Затем записывается новый образ уже с примененными изменениями, и система начинает работу уже с чистым log-файлом. Следует заметить, что данную работу NameNode-сервер выполняет единожды при его первом запуске. В последующем, подобные операции возлагаются на вторичный NameNode-сервер. FsImage и EditLog в конечном итоге хранятся на основном сервере.
Механизм репликации:
При обнаружении NameNode-сервером отказа одного из DataNode-серверов (отсутствие heartbeat-сообщений от оного), запускается механизм репликации данных:
— выбор новых DataNode-серверов для новых реплик
— балансировка размещения данных по DataNode-серверам
Аналогичные действия производятся в случае повреждении реплик или в случае увеличения количества реплик присущих каждому блоку.
Стратегия размещение реплик:
Данные хранятся в виде последовательности блоков фиксированного размера. Копии блоков (реплики) хранятся на нескольких серверах, по умолчанию — трех. Их размещение происходит следующим образом:
— первая реплика размещается на локальном ноде
— вторая реплика на другой ноде в этой же стойке
— третья реплика на произвольной ноде другой стойки
— остальные реплики размещаются произвольным способом
При чтении данных клиент выбирает ближайшую к нему DataNode-сервер с репликой.
Целостность данных:
Ослабленная модель целостности данных, реализованная в файловой системе, не гарантирует идентичность реплик. Поэтому HDFS перекладывает проверку целостности данных на клиентов. При создании файла клиент рассчитывает контрольные суммы каждые 512 байт, которые в последующем сохраняются на DataNode-сервере. При считывании файла, клиент обращается к данным и контрольным суммам. И, в случае их несоответствия происходит обращение к другой реплике.
Запись данных:
«При записи данных в HDFS используется подход, позволяющий достигнуть высокой пропускной способности. Приложение ведет запись в потоковом режиме, при этом HDFS-клиент кэширует записываемые данные во временном локальном файле. Когда в файле накапливаются данные на один HDFS-блок, клиент обращается к NameNode-серверу, который регистрирует новый файл, выделяет блок и возвращает клиенту список datanode-серверов для хранения реплик блока. Клиент начинает передачу данных блока из временного файла первому DataNode-серверу из списка. DataNode-сервер сохраняет данные на диске и пересылает следующему DataNode-серверу в списке. Таким образом, данные передаются в конвейерном режиме и реплицируются на требуемом количестве серверов. По окончании записи, клиент уведомляет NameNode-сервер, который фиксирует транзакцию создания файла, после чего он становится доступным в системе»
Удаление данных:
В силу обеспечения сохранности данных (на случай отката операции), удаление в файловой системе происходит по определенной методике. Вначале файл перемещается в специально отведенную для этого /trash директорию, а уже после истечения определенного времени, происходит его физическое удаление:
— удаление файла из пространства имен HDFS
— освобождение связанных с данными блоков
Текущие недостатки:
— отсутствие автоматического запуска главного сервера в случае его сбоя (данная функциональность реализована в GFS)
— отсутствие операций append (предполагается в версии 0.19.0) и snapshot (данные функциональности также реализованы в GFS)
Почитать, что будет в следующих версиях HDFS можно в вики проекта на сайте Apache Foundation. Дополнительную информацию и мнения людей работающих с Hadoop можно найти в блогах компаний активно использующих данную технологию: Yahoo, A9, Facebook, Last.fm, Laboratory
Источники:
— Dhruba B. Hadoop Distributed File System, 2007
— Tom W. A Tour of Apache Hadoop
— Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung The Google File System
— Сухорослов О.В. Новые технологии распределенного хранения и обработки больших массивов данных
Распределенные файловые системы. Технологический обзор. Продуктовый обзор
Файловая система (file system) — это способ организации, хранения и именования данных на носителях информации в компьютерах. Файловые системы используются также в другом электронном оборудовании: в цифровых фотоаппаратах и диктофонах, в мобильных телефонах, и т. п.
Распределенные файловые системы (distributed file system) работают сразу на многих компьютерах (серверах) с репликацией для защиты от сбоев. Иногда «распределенными» также называют сетевые файловые системы, тем самым показывая, что распределенные файловые системы имеют больше возможностей, чем обычная передача данных по сети. Носители СХД, связанные с распределенными файловыми системами, могут (и даже должны) быть распределены между многими компьютерными системами.
Определения
Существует также понятие «кластерная файловая система». Различия между всеми этими терминами (сетевая, распределенная, кластерная) немного расплывчаты. Поэтому сначала нужно определить, что такое сетевая, кластерная и распределенная система.
С таким определением, например, NFSv3 можно отнести к сетевой файловой системе (network file system). GFS2 – это кластерная файловая система. GlusterFS – это распределенная файловая система. NFSv4, в свою очередь, это некий гибрид между сетевой файловой системой, но с поддержкой нескольких серверов, внедренных в нее.
Сумятицу иногда вносит то, что иногда вкладывается разный смысл в понятие «распределенный» (distributed). Здесь надо понимать, что «распределенность» должна присутствовать не только между серверами (тогда это кластер) в локальной сети, но также и между местоположениями этих серверов в глобальной сети (WAN), со всеми присущими ей особенностями. А именно: большими задержками и низкой надежностью соединений.
Распределенные (в таком определении) файловые системы состоят из нескольких географически разнесенных серверов, соединенных по модели sharing nothing, где каждый активный сервер имеет собственную СХД. Кроме того, распределенные файловые системы делятся на два типа: параллельные системы (Parallel file systems) и полностью параллельные файловые системы (Fully parallel file systems).
Так называются системы, которые предоставляют параллельный доступ к их серверам хранения для каждого клиента. Это позволяет устранить «узкие места» одного сервера по всем параметрам: IOPS, полоса, ограничения вычислительной способности процессора и кэш-памяти. Такие системы используются в высокопроизводительных компьютерных системах и бизнес-приложениях, например, в информационных системах фондовых бирж, Примеры: pNFS, Lustre.
Сравнение между сетевой и распределенной файловой системой на примере Lustre (источник: https://www.atipa.com/lustre-parallel-storage)
Полностью параллельными такие системы называются в том случае, когда не только данные, но и метаданные (различные индексы и пр.), также распределяются параллельно между всеми клиентами. Примеры таких систем – OrangeFS и Ceph.
Соотношения между сетевыми системами (Network), кластерными системами (Cluster), распределенными (Distributed), а также параллельными (Parallel) и полностью параллельными системами (Fully parallel) могут быть представлены следующим образом.
Соотношения между видами и типами распределенных (distributed file system) файловых систем (источник: lvee.org/en/abstracts/33)
С какой целью создавались распределенные файловые системы и какие задачи они решают
Во-первых, как уже указывалось, они нужны для защиты от сбоев и облегчения масштабирования СХД. Большое значение имеет API (Application Programming Interface), который они обеспечивают. Это значит, что каждое приложение, скрипт или библиотека стандартных подпрограмм, написанные в течение последних нескольких десятков лет, могут использовать распределенную файловую систему без коррекций их кода, без процедур импорта и экспорта данных. Даже такие решения, как SQL, не могут сравниться с универсальностью и простотой API распределенных файловых систем.
Во-вторых, распределенные файловые системы стали настолько популярными, что, используя их, мы иногда этого и не замечаем. Например, стриминг фильмов с сайта популярных видеохостингов (того же YouTube) почти всегда делается через распределенные файловые системы.
При производстве анимационных фильмов модели сцен и рендерные части в процессе производства почти всегда централизованно хранятся в распределенной файловой системе.
Виртуальные «блочные устройства» в облаке на самом деле часто являются файлами в распределенной файловой системе.
Системы распределенных вычислений в крупных научных лабораториях, таких как ЦЕРН, часто состоящие из более чем 100 тысяч процессоров, используют распределенные файловые системы для хранения данных экспериментов и результатов их обработки.
Можно сказать, что распределенные файловые системы – это то, как сегодня хранятся большинство данных, особенно «неструктурированных», которые используются при анализе «больших данных» (Big Data). Без этих систем провайдерам было бы очень сложно предоставлять различные онлайновые и медиауслуги.
Как пример можно было бы привести неудачу широко рекламировавшейся в свое время услуги «интернет-телевидения» (IPTV). Для того, чтобы ей воспользоваться, нужно было провести ряд сетевых настроек, которые любому IT-шнику могут показаться элементарными (например, «маска подсети» и пр.), но для простого обывателя они являлись отпугивающим фактором, несмотря на возможность смотреть «100 фильмов за 100 рублей в месяц». В результате эта услуга, что называется, «не пошла». Распределенные файловые системы с удобным интерфейсом как раз и помогают решить эти проблемы. Пример – любой популярный видеохостинг, либо пакет онлайн-телевидения от интернет-провайдера (например, «ОнЛайм» от Ростелекома).
Для различных предприятий и организаций распределенные файловые системы помогут решить проблемы управления данными и снизить стоимость хранения данных.
Распределенные файловые системы – кто они?
Учитывая сказанное выше об определениях, к распределенным файловым системам различные источники относят много систем, причем разные источники могут давать разные непересекающиеся списки. Ниже приведен неполный список из разных источников.
Продуктовый обзор
ZFS, IBM GPFS (Spectrum Scale), Ceph, Lustre
Файловая система ZFS была разработана в 2001 году в компании Sun Microsystems, приобретенной компанией Oracle в 2010 году. Аббревиатура ZFS означала «Zettabyte File System» (файловая система для объемов зеттабайт). Однако в настоящее время ZFS может хранить данные много большего объема.
Эта система проектировалась с очень большим запасом по параметрам, на основе совершенно справедливого прогноза огромного роста данных, подлежащих хранению в распределенных системах в будущем.
ZFS от Oracle и открытая система OpenZFS пошли разными путями, с тех пор, как Oracle закрыл проект OpenSolaris. OpenZFS — это общий проект, объединяющий разработчиков и компаний, которые используют файловую систему ZFS и работают над ее совершенствованием, чтобы сделать ZFS более широко используемым продуктом с открытым исходным кодом.
Некоторые теоретические пределы параметров, заложенные при проектировании ZFS:
Функции ZFS
ZFS обладает рядом полезных функций:
Хранение в пулах (Pooled storage)
В отличие от большинства файловых систем, ZFS объединяет функции файловой системы и менеджера томов (volume manager). Это означает, что ZFS может создавать файловую систему, которая будет простираться по многим группам накопителей ZVOL или пулам. Более того, можно добавлять емкость в пул простым добавлением нового накопителя. ZFS сама выполнит партицию и форматирование нового накопителя.
Пулы хранения в ZFS
В пулах можно легко создавать файловые системы (области хранения данных) для каждого приложения и предмета использования.
Копирование при записи (Copy-on-write)
В большинстве файловых систем при перезаписи данных на то же физическое место носителя ранее записанные там данные теряются навсегда. В ZFS новая информация пишется в новый блок. После окончания записи метаданные в файловой системе обновляются, указывая на местоположение нового блока. При этом, если в процессе записи информации с системой что-то происходит, старые данные будут сохранены. Это означает, что не нужно запускать проверку системы после аварии.
Снапшоты (Snapshots)
Copy-on-write закладывает основу для другой функции ZFS: моментальных снимков системы (снапшотов). ZFS использует для отслеживания изменений в системе.
Снапшот содержит оригинальную версию файловой системы, и в «живой» файловой системе присутствуют только изменения, которые были сделаны с момента последнего снапшота. Никакого дополнительного пространства не используется. Когда новые данные записываются в «живую» систему, выделяются новые блоки для сохранения этих данных.
Если файл удаляется, то ссылка на него в снапшоте тоже удаляется. Поэтому снапшоты в основном предназначены для отслеживания изменений в файлах, а не для добавления или создания файлов.
Снапшоты могут устанавливаться в режим read-only (только чтение), чтобы восстановить прежнюю версию файла. Также можно сделать откат «живой» системы на предыдущий снапшот. При этом будут потеряны только те изменения, которые были сделаны после момента этого снапшота.
Верификация целостности данных и автоматическое восстановление данных
При любой записи данных в ZFS создается контрольная сумма (checksum). При считывании данных, происходит сверка с этой контрольной суммой. Если проверка показывает расхождение с контрольной суммой, то ZFS устраняет ошибку считывания.
В традиционных файловых системах данные не могут быть восстановлены, если повреждение данных затрагивает область контрольной суммы. В ZFS данные и контрольная сумма физически разделены и данные могут быть восстановлены из блока высокого уровня.
Верификация целостности и автоматическое восстановление данных в ZFS
RAID-Z
ZFS может создавать RAID-массивы без необходимости использования дополнительного программного или аппаратного обеспечения. Поэтому неудивительно, что ZFS имеет собственный вариант RAID: RAID-Z.
RAID-Z представляет собой вариант RAID-5, котором предусмотрены средства преодоления ошибки write hole error, присущей RAID-5, когда данные и информация о паритете становятся не соответствующими друг другу после случайного перезапуска системы.
RAID-Z имеет три уровня: RAID-Z1, в котором нужно по крайней мере два диска для хранения и один для паритета; RAID-Z2, который требует по крайней мере двух дисков для хранения и двух для паритета; RAID-Z3 требует по крайней мере двух дисков для хранения и трех для паритета.
Добавление дисков в пул RAID-Z делается попарно.
Автоматическая замена на запасной диск (Hot spare)
В пуле хранения, сконфигурированном с запасным диском, отказавший диск автоматически заменяется запасным.
Автоматическая замена дисков при отказе
Один и тот же диск может быть запасным для нескольких пулов сразу.
При создании ZFS преследовалась цель сделать их «последним словом» в файловых системах. Во времена, когда большинство файловых систем были 64-битными, создатели ZFS решили, что лучше сразу заложить адресное пространство на 128 бит для будущего развития. Это означает, что ZFS имеет емкость в 16 миллиардов раз большую емкость, чем 32- или 64-битные системы. Создатель ZFS Джефф Бонвик (Jeff Bonwick), характеризуя величину этой емкости, сказал, что система в полной конфигурации с такой емкостью потребует для электропитания энергию, достаточную, чтобы вскипятить все океаны в мире.
IBM Spectrum Scale
Объем создаваемых, хранимых и анализируемых данных в мире возрастает экспоненциально. Часто требуется анализировать информацию быстрее конкурентов, причем в условиях роста собственной IT-инфраструктуры.
Файловая система в СХД организации должна поддерживать как большие данные (Big Data), так и традиционные приложения. IBM Spectrum Scale™ решает широкий спектр задач, и представляет собой высокопроизводительное решение для управления данными со встроенными функциями архивирования и аналитики.
IBM Spectrum Scale – это универсальная программно-конфигурируемая система хранения корпоративного класса, которая работает со многими типами носителей и автоматически переводит данные с уровня на уровень в зависимости от частоты их использования, обеспечивая отказоустойчивость, масштабируемость и управляемость.
Это решение, созданное на основе файловой системы IBM General Parallel File System (GPFS), способно масштабировать емкость и производительность для аналитических систем, репозиториев контента и других задач.
Когнитивные механизмы IBM умеют распределять данные среди различных устройств хранения, тем самым оптимизируя использование доступной емкости, упрощая администрирование и обеспечивая высокую производительность. IBM Spectrum Scale поддерживает глобального пространства имен с универсальным доступом, которое объединяет современные средства для работы с файлами, размещенных в сетевых файловых системах (NFS), блочные хранилища и серверы со встроенными хранилищами данных большого объема. Файловая система IBM Spectrum Scale может использоваться для работы с файлами (POSIX, NFS, CIFS), объектами (S3, SWIFT) и распределенной файловой системой Hadoop (HDFS) при решении задач анализа больших данных на месте хранения.
Задачи и возможности IBM Spectrum Scale.
Свойства IBM Spectrum Scale
Хорошая масштабируемость, которая позволяет обеспечивать максимальную пропускную способность и минимальные задержки при доступе.
Аналитика с учетом данных, позволяющая автоматически переносить данные на оптимальный уровень хранения (флеш, диск, кластер, лента), что позволяет до 90 % снизить расходы на архивирование данных.
Автоматическое размещение данных по уровням в файловой системе IBM Spectrum Scale
Распределенность, то есть возможность доступа к данным из любого места, ускоряет работу приложений по всему миру, за счет технологии распределенного кэширования и активного управления файлами.
Безопасность данных, технологии идентификация, шифрования, защиты Erasure Coding и репликации позволяют достичь соответствия регулятивным требованиям.
Универсальность, единое решение для управления масштабируемым хранилищем данных, обеспечивающее унификацию виртуализации, поддержки аналитических сред, обработки файлов и объектов.
Прозрачные политики хранения делают возможным сжатие и многоуровневое хранение данных на ленточных накопителях или в облаке, с целью сокращения расходов. Размещение данных с учетом места их использования уменьшает задержки и увеличивает производительность работы с данными.
Интеллектуальное кэширование данных, технология Active File Management (AFM) распространяет глобальное пространство имен Spectrum Scale за пределы географических границ, обеспечивая высокую производительность при чтении и записи данных и автоматическое управление пространством имен. Данные записываются или изменяются локально и в других местах эти данные получают с минимальной задержкой.
Графический интерфейс IBM Spectrum Scale GUI обеспечивает простое администрирование объемов данных уровня петабайт различных типов: файловых, объектных или блочных.
IBM Spectrum Scale – это хорошо зарекомендовавшее себя масштабируемое решение по администрированию данных, которое ранее называлось GPFS (General Parallel File System). Начиная с версии 4.1, это решение называется Spectrum Scale. Однако версии до 4.1 будут поддерживаться под старым названием GPFS.
Основные характеристики
Применения
Spectrum Scale используется уже более 15 лет во многих отраслях экономики во всем мире, и в таких областях, требовательных к объему и производительности обработки данных, как:
Функциональные возможности
Основные компоненты системы
Три NSD, определенные как диски tiebreaker disk для кворумных узлов (источник: IBM)
Три редакции Spectrum Scale
Есть три разных редакции (Edition) Spectrum Scale:
Распределенная файловая система Hadoop File System
Распределенная файловая система Hadoop File System (HDFS) входит в состав свободно распространяемой платформы распределенных вычислений Hadoop. При создании HDFS было использовано много ключевых идей из системы GFS, описанной в предыдущем разделе. Поэтому, по сути, HDFS является общедоступной альтернативой закрытой технологии GFS. Приведенное ниже описание HDFS соответствует текущей на момент написания статьи версии Hadoop 0.17.0.
Перечислим основные тезисы и предположения, повлиявшие на архитектуру и реализацию HDFS. Во многом эти предположения пересекаются с GFS. HDFS спроектирована для запуска на кластерах из массовых комплектующих, обладает высокой отказоустойчивостью и реализует автоматическое восстановление после отказов. HDFS нацелена на поддержку приложений, связанных с обработкой больших объемов данных. Поэтому акцент делается на обеспечении высокой пропускной способности при доступе к данным в потоковом режиме, а не на низкой задержке (латентности). Большие объемы данных подразумевают большие размеры хранимых файлов, измеряемые в гигабайтах и терабайтах, поэтому HDFS оптимизирована для хранения файлов подобного размера. Отказ от следования стандарту POSIX, накладывающему ряд жестких ограничений, которые не требуются для целевых приложений, позволяет повысить производительность системы. HDFS жестко следует модели однократной записи файла с последующим многократным чтением его (write- once-read-many). Данная модель соответствует многим приложениям и упрощает обеспечение целостности данных. Текущая версия HDFS поддерживает только однократную запись в файл одним клиентом. В планах разработчиков предусмотрена реализация операции записи данных в конец файла (append), аналогичной функциональности GFS.
Namenode-сервер фиксирует все транзакции, связанные с изменением метаданных файловой системы, в log-файле, называемом EditLog. Примерами подобных транзакций могут служить создание нового файла или изменение фактора репликации у существующего файла. Все метаданные файловой системы, включая отображения файлов в блоки и атрибуты файлов, хранятся в файле Fslmage. Файлы EditLog и Fslmage хранятся на локальном диске namenode-сервера. Для хранения метаданных файловой системы используется компактное представление, позволяющее загружать их целиком в оперативную память namenode-сервера. При запуске namenode- сервер считывает файлы EditLog и FsImage в оперативную память и применяет все транзакции из log-файла к образу файловой системы, после чего сохраняет новую версию Fslmage на диск и очищает EditLog. Подобная операция проводится пока только при запуске сервера. Во время работы сервера размер log-файла может стать очень большим, поэтому в системе предусмотрен специальный компонент (т.н. secondary namenode), который контролирует размер log-файла и периодически обновляет файл FsImage.
Datanode-сервер хранит каждый блок данных в виде файла на локальном жестком диске. При этом серверу ничего не известно о HDFS-файлах. При запуске datanode-сервер сканирует локальную файловую систему, генерирует список хранимых HDFS-блоков и отправляет эту информацию namenode-серверу.

Клиенты и серверы HDFS взаимодействуют друг с другом по протоколу TCP с использованием механизма Remote Procedure Call (RPC). Важной особенностью, характерной также и для GFS, является то, что namenode-сервер никогда не инициирует RPC-вызовы, а только отвечает на вызовы клиентов и datanode-серверов. Все нужные инструкции datanode-серверам namenode-сервер отправляет, используя ответы на приходящие heartbeat-вызовы. Подобная техника, называемая piggybacking, позволяет уменьшить зависимость главного сервера от состояний подчиненных серверов.
Namenode-сервер контролирует состояние datanode-серверов с помощью heartbeat-сообщений. При прекращении поступления сообщений от datanode-сервера, вследствие отказа самого сервера или нарушения связности сети, данный сервер помечается как отказавший и не учитывается при обработке запросов клиентов. Все данные, хранимые на отказавшем сервере, в результате чего уровень репликации некоторых блоков падает ниже установленного значения. Namenode-сервер автоматически инициирует репликацию данных блоков. Аналогичные действия проводятся в случае сбоя жесткого диска на datanode-сервере, повреждения отдельных реплик или увеличения фактора репликации файла.
Целостность хранимых данных контролируется с помощью контрольных сумм. При создании файла, HDFS-клиент вычисляет контрольную сумму каждого блока и сохраняет ее в специальном скрытом HDFS-файле в той же директории, что и файл. При чтении данных клиент проверяет их на целостность с помощью соответствующего checksum-файла. В случае если проверка не проходит, клиент может обратиться за данными к другому datanode-серверу.
Данные, хранимые в файлах EditLog и Fslmage на namenode-сервере, являются критичными для функционирования HDSF. Повреждение этих может привести к разрушению файловой системы. Поэтому namenode-сервер поддерживает работу с несколькими копиями данных файлов, которые могут быть размещены на других машинах. В этом случае изменения записываются синхронно в каждую из копий файла. Данный механизм снижает производительность namenode-сервера, но позволяет увеличить его отказоустойчивость.
В текущей реализации HDFS главный сервер является «слабым местом» системы. При выходе из строя namenode-сервера система требуется ручное вмешательство, до которого система становится неработоспособной. Автоматический перезапуск namenode-сервера и его миграция на другую машину пока не реализованы.
При записи данных в HDFS используется подход, позволяющий достигнуть высокой пропускной способности. Приложение ведет запись в потоковом режиме, при этом HDFS-клиент кэширует записываемые данные во временном локальном файле. Когда в файле накапливаются данные на один HDFS-блок, клиент обращается к namenode-серверу, который регистрирует новый файл, выделяет блок и возвращает клиенту список datanode-серверов для хранения реплик блока. Клиент начинает передачу данных блока из временного файла первому datanode-серверу из списка. Datanode-сервер получает данные небольшими порциями, сохраняет их на диске и пересылает следующему datanode-серверу в списке. Таким образом, данные передаются в конвейерном режиме и реплицируются на требуемом количестве серверов. По окончании записи, клиент уведомляет namenode-сервер, который фиксирует транзакцию создания файла, после чего он становится доступным в системе.
Механизм удаления файлов в HDFS реализован аналогично GFS. Файл не удаляется из системы мгновенно, а перемещается в специальную директорию /trash. По истечении настраиваемого периода времени, namenode-сервер удаляет файл из пространства имен HDFS и освобождает связанные с файлом блоки. По умолчанию удаленные файлы хранятся в системе в течение 6 часов, чем объясняется задержка между формальным удалением файла и освобождением дискового пространства.
HDFS реализована на языке Java, что обеспечивает высокую переносимость системы. В то же время, HDFS тесно «привязана» к распространенной на серверах платформе GNU/Linux, что затрудняет запуск системы на ОС Windows (требуется эмулятор shell, например Cygwin).
Для доступа к HDFS из приложений программисты могут использовать прикладной интерфейс программирования (API) на языках Java и С. Также планируется реализовать доступ к HDFS через протокол WebDAV. Пользователям HDFS доступен интерфейс командной строки DFSShell. Для администрирования системы используется набор команд DFSAdmin. HDFS также предоставляет Web-интерфейс, позволяющий пользователям просматривать информацию о системе, структуру файловой системы и содержимое файлов через браузер.













