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-сервером.

    hdfs_arch

    Secondary NameNode:


    Основной NameNode-сервер фиксирует все транзакции, связанные с изменением метаданных файловой системы, в log-файле, называемом EditLog. При запуске основного NameNode-сервера, он считывает образ HDFS (расположенный в файле FsImage) и применяет к нему все изменения, накопленные в EditLog. Затем записывается новый образ уже с примененными изменениями, и система начинает работу уже с чистым log-файлом. Следует заметить, что данную работу NameNode-сервер выполняет единожды при его первом запуске. В последующем, подобные операции возлагаются на вторичный NameNode-сервер. FsImage и EditLog в конечном итоге хранятся на основном сервере.

    Механизм репликации:


    hdfs_repl

    При обнаружении 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
    — Сухорослов О.В. Новые технологии распределенного хранения и обработки больших массивов данных

    Данная статья вступительная, ее цель: посветить читателя в атмосферу соответствующих наработок. В случае положительных отзывов и/или заинтересованности читателей мы подготовим ряд дополнительных смежных статей:
    • Установка Hadoop Core + Hbase на Windows OS (+ php класс реализующий взаимодействие с Hbase при помощи REST API)
    • Перевод статьи: «MapReduce: Simplified Data Processing on Large Clusters»
    Поделиться публикацией

    Комментарии 41

      0
      вот если б она на erlang была написана…
        0
        Это не мешает использовать Erlang в качестве написания приложений. :)
          +5
          Было бы +10 к понтам?
          • НЛО прилетело и опубликовало эту надпись здесь
              +2
              Кто вам сказал такую ерунду?
              • НЛО прилетело и опубликовало эту надпись здесь
                  +3
                  Вы это в википедии прочитали? Судя по вашему использованию таких баззвордов, как «треды», которых в Erlang вообще нет — похоже на то.

                  Erlang конечно язык интересный, но дальше телекома вряд ли куда уйдёт. Как-то до этого дня обходились все Java, так и дальше будут обходиться.
          +3
          Читатели заинтересованы. :-)
          Текстов на русском про Hadoop нет.
            +3
            Да редкий материал… в свете часто не очень оригинального материала на сайте статья вызывает уважение
              0
              +8
              ФС на Java? Оригинально. :)
                +1
                Есть же драйвера на C#, так почему бы и нет. Ждем компилятор, написанный на PHP.
                  +1
                  Лучше ОС на на brainfuck )
                    0
                    Графический редактор на Piet.
                    0
                    На BASH компайлер асма уже сваяли :)

                    slashdot.org/articles/01/02/15/046242.shtml
                      0
                      Ну вот, как всегда, сидишь, выдумываешь что-то в корне абсурдное, принципиально никому не нужное, противоречащее элементарным жизненным устоям, а это уже давно есть и с успехом применяется.
                  0
                  да… темка очень интересная.
                    +1
                    GFS выделена в отдельный проект, или это закрытая разработка Google?
                      +1
                      закрытая разработка гугла.
                        +1
                        Закрытый, так как это одна из ключевых технологий Google
                          +2
                          Это и отдельный проект и закрытая разработка, компания делиться только концепцией но не реализацией.
                          BigTable к примеру использует GFS «to store log and data files.»
                            0
                            А интимные подробности, такие как «отсутствие автоматического запуска главного сервера в случае его сбоя (данная функциональность реализована в GFS)», получены из открытых источников?
                        +1
                        отличный материал, очень жду продолжения! спасибо!
                          0
                          Когда знакомился впервые с Hadup было только API на Java и C++ вроде, позволяющая работать с HDFS. Есть ли уже реализация в виде драйвера или модуля для linux, чтоб можно было смонтировать HDFS на клиентском узле?
                            0
                            Hadoop — извините меня!?
                              0
                              пока нету, но в их джире кто-то брался за изготовление WebDav интерфейса. имея WebDav теоретически можно сомтрировать файловую систему через fuse.
                                0
                                WebDav вроде как работал.
                                  0
                                  мы чуть подтюнили ихний WebDav — подчистили и прикрутили трансляцию прав доступа с/в HDFS:
                                  www.hadoop.iponweb.net/
                                0
                                Спасибо! Отличная статья. Достаточно полное описание hdfs. А есть ли примеры (проекты) использования этой распределенной фс отдельно от Hadoop?
                                  +1
                                  следует понимать что проект Hadoop состоит из:
                                  — Hadoop Core (HDFS + MapReduce + Api)
                                  — Hbase
                                  — ZooKeeper

                                  Вот, если речь идет о Hadoop Core, то новая архитектура SpyLog использует только ее.
                                    0
                                    упс. имел ввиду MapReduce естественно :)
                                  +1
                                  К сожалению для WEB больше неободимо работать с большим кол-вом мелких файлов. Поетому единственное решение, которое я нашел из работающих это MogileFS. Альтернатив нет.
                                    0
                                    А чем люстра не устраивает
                                    +1
                                    Кстати, на днях была интересная новость, которая, видимо, будет способствовать развитию Hadoop и его принятию корпоративным сектором: «Команда бывших сотрудников гигантов интернет-отрасли Google, Yahoo! и Facebook объединилась для создания стартапа Cloudera, который предоставит специализированную техническую поддержку по Open Source-платформе Hadoop.» © www.nixp.ru/news/9346
                                      0
                                      Спасибо! Весьма интересно, буду ждать продолжения.
                                        0
                                        А можете добавить еще в сравнительную колонку DFS (Distributed File System), которая от Microsoft.
                                          0
                                          как на меня слабоватая статья, вот статья где более детально расписана установка.
                                            0
                                            «По окончании записи, клиент уведомляет NameNode-сервер, который фиксирует транзакцию создания файла, после чего он становится доступным в системе»
                                            Тоесть пока фаил не запишется на все требуемые сервера транзакция записи не завершится? или другими словами фаил будет доступен, когда он запишется на все сервера или уже будет доступен когда попадет на первый?
                                              –7
                                              До чего же убогие картинки. Надеюсь, это не архитектор Hadoop рисовал…
                                                0
                                                Мне кажется, что одним из огромнейших недостатков DFS является то что протокол namenode реализован через сильноспецифический java RPC, поэтому все клиентские реализиции работают через Java-биндинг

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                Самое читаемое