# Распределенная файловая система HDFS. Лекция 3
**Файловая система** (далее ФС) - порядок, определяющий способ организации, хранения и именования данных на носителях информации.
Конкретная файловая система определяет размер имени файлов и каталогов, максимальный возможный размер файла и раздела, набор атрибутов файла.
Некоторые ФС имеют сервисные возможности: разграничение доступа, шифрование файлов.
**Распределенная ФС** - компонент, использующийся для упрощения доступа и управления файлами, физически распределеннымипо сети.
При её использовании файлы, распределенные по серверам, представляются находящимися в одном месте.
## Серверные роли HDFS
### Name node
✓ управляет пространством имен ФС
✓ поддерживает дерево ФС и метаданные для всех файлов и каталогов в дереве
✓ не хранит местоположение блоков постоянно, эта информация подтягивается из Data node при запуске системы
### Data node
✓ хранит блоки файлов
✓ таких узлов в кластере множество
✓ регулярно отправляет Name node свой статус и информацию о блоках
### Secondary name node
✓ объединяет образы пространства имен с журналом изменений
✓ для объединения требует много мощности, поэтому выполняется на отдельной машине
✓ хранит копию объединения на случай ручного восстановления
## Запись данных в HDFS

1. Клиент разрезает файл на цепочки блокового размера (128 Мб).
2. Клиент соединяется с NameNode и запрашивает операцию записи, присылая количество блоков и требуемый уровень репликации.
3. NameNode отвечает цепочкой из DataNode.
4. Клиент соединяется с первым узлом из цепочки (если не получилось с первым, то со вторым и т. д. Если не получилось совсем — откат). Клиент делает запись первого блока на первый узел, первый узел — на второй и т. д. Если клиент сумеет записать успешно блок хотя бы на один узел (репликация по типу «eventual»), в дальнейшем NameNode обязуется компенсировать и достичь желаемого уровня репликации.
5. По завершении записи в обратном порядке (4 -> 3, 3 -> 2, 2 -> 1, 1 -> клиенту) присылаются сообщения об успешной записи.
6. Как только клиент получит подтверждение успешной записи блока, он оповещает NameNode о записи блока, затем получает цепочку DataNode для записи второго блока и т.д.
## Свойства HDFS
1. **Отказоустойчивость**
✓ HDFS – система, работающая с большим количеством оборудования, а значит, шанс того, что случится какой-либо сбой достаточно высок, и это нормально.
✓ Компоненты HDFS нацелены на своевременное отслеживание этих сбоев и быстрое восстановление после них.
2. **Потоковый доступ к данным**
✓ Приложения, запускаемые на HDFS требуют потокового доступа к своим данным. Это не обычные приложения для общего пользования, HDFS предназначена скорее для пакетной обработки, нежели для интерактивного взаимодействия с конкретным пользователем.
✓ HDFS оптимизирована для обеспечения высокой пропускной способности данных за счет возможных задержек.
✓ Приложения, которым требуется доступ к данным с малой задержкой в диапазоне десятков миллисекунд, не будут хорошо работать с HDFS.
3. **Работа с большими объёмами данных**
✓ HDFS предназначена для работы с огромными объёмами данных (терабайты и петабайты).
4. **Простая модель когерентности**
✓ После создания файла он виден в пространстве имен файловой системы.
✓ После того, как объем записанных данных достигнет размера блока, первый блок станет видимым новым читателям.
✓ Файл, который был создан, записан и закрыт, не нужно изменять, кроме как для добавления и удаления части данных (append и truncate).