Hadoop Distributed Filesystem
Hadoop Distributed File System (HDFS) - це розподілена файлова система, яка забезпечує високошвидкісний доступ до даних і є одним з ключових компонентів платформи Hadoop. HDFS - це файлова система на основі Java, яка забезпечує масштабовність і надійне зберігання даних, призначена для розбиття великих кластерів на стандартних серверах. HDFS, MapReduce та YARN утворюють ядро Apache Hadoop.
Концепції та структура HDFS
HDFS є ієрархічною файловою системою. Таким чином, в HDFS є підтримка вкладення каталогів. У каталозі може розташовуватися нуль або більше файлів, а також будь-яка кількість підкаталогів.
HDFS складається з наступних обов'язкових компонентів:
- Вузол імен (NameNode) - програмний код, що виконується, в загальному випадку, на виділеній машині примірника HDFS і відповідає за файлові операції (роботу з метаданими);
- Вузол даних (DataNode) - програмний код, як правило, виконується виділеної машині примірника HDFS і відповідає за операції рівня файлу (робота з блоками даних).
Hadoop містить єдиний вузол типу NameNode і довільну кількість вузлів типу DataNode.
Основні концепції, закладені при проектуванні HDFS, і архітектурні рішення, застосовувані для реалізації цих концепцій:
- Обсяг даних. HDFS не повинна мати досяжних в осяжному майбутньому обмежень на обсяг збережених даних.
Архітектурне рішення:
- HDFS зберігає файли поблочно. Блоки в HDFS розподілені між вузлами даних обчислювального кластера. Всі блоки (крім останнього блоку файлу) мають однаковий розмір, крім того блок може бути розміщений на декількох вузлах.
- Відмовостійкість. HDFS розцінює вихід з ладу вузла даних як норму, а не як виняток (дійсно, ймовірність виходу хоча б одного вузла з тисячі навіть на надійному фізичному обладнанні істотна).
Архітектурні рішення:
- Для забезпечення відмовостійкості всі дані в HDFS репліціюются налаштовувану кількість разів.
- Захист від копіювання пошкоджених даних вирішено за допомогою зберігання контрольних сум в окремому прихованому файлі.
- Копіювання метаданих за допомогою вторинного вузла імен.
- Автодіагностика. Діагностика справності вузлів в Hadoop-кластері не повинна вимагати додаткового адміністрування.
Архітектурні рішення:
- Кожен вузол даних через певні інтервали часу відправляє діагностичні повідомлення вузлу імен.
- Логування операцій над файлами в спеціальний журнал вузла імен.
Продуктивність. У квітні 2008 року Hadoop побив світовий рекорд продуктивності в стандартизованном тесті продуктивності по сортуванню даних - 1 Тбайт був оброблений за 309 сек. на кластері з 910 вузлів.
Архітектурні рішення:
- Принцип «один раз записати - багато разів прочитати» (Write-once and read-many, WORM) повністю звільняє систему від блокувань типу «запис-читання». Позбутися від конфліктів множинного запису архітектори вирішили, дозволивши запис у файл в один час тільки одному процесу.
- HDFS оптимізований під потокову передачу даних.
- Зниження навантаження на канали передачі даних (а саме ці канали найчастіше є вузьким місцем у розподілених середовищах), а також більш раціональне використання простору на жорстких дисках дозволило досягти стиснення даних.
- Реплікація відбувається в асинхронному режимі.
- Зберігання всіх метаданих вузла "NameNode" в оперативній пам'яті.
Вузол імен
Вузол імен (NameNode) являє собою програмний код, що виконується, в загальному випадку, на виділеній машині екземпляра HDFS і відповідає за файлові операції, такі як відкриття і закриття файлів, створення і видалення каталогів. Крім того, NameNode відповідає за:
- управління простором імен файлової системи
- управління доступом з боку зовнішніх клієнтів
- відповідність між файлами і репліціюватися на вузлах даних блоками
Hadoop містить єдиний вузол типу NameNode, що породжує вразливість всього кластера, викликану виходом вузол типу NameNode (одинична точка відмови). HDFS підтримує вторинний вузол імен - Secondary NameNode. Часто цей факт є причиною омани, що при відмові первинного вузла імен, його автоматично замінить вторинний вузол імен. Насправді підтримки автоматичного відновлення кластера після відмови первинного вузла NameNode у версії 1.0.0 немає.
Вторинний вузол імен виконує такі функції:
- копіює образ HDFS (розташований у файлі FsImage) і лог транзакцій операцій з файловими блоками (EditLog) у тимчасову папку
- застосовує зміни, накопичені в балці транзакцій до образу HDFS
- записує новий образ FsImage на вузол NameNode, після чого відбувається очищення EditLog
Вузол даних
Вузол даних (DataNode), як і вузол NameNode, також являє собою програмний код, що виконується, як правило, на виділеній машині екземпляра HDFS і відповідає за операції рівня файлу, такі як: запис і читання даних, виконання команд створення, видалення і реплікації блоків , отримані від вузла NameNode. Крім того, вузол DataNode відповідає за:
- періодичну відправку повідомлення про стан (heartbeat-повідомлення)
- обробку запитів на читання і запис, що надходять від клієнтів файлової системи HDFS
Клієнти HDFS
Клієнти являють собою програмних клієнтів, що працюють з файловою системою. У ролі клієнта може виступати будь-який додаток або користувач, який взаємодіє через спеціальний API з файловою системою HDFS.
Для клієнта HDFS виглядає як звичайна файлова система - ієрархія каталогів з вкладеними в них підкаталогами і файлами. Як і у файлових системах загального призначення, клієнтові, за наявності достатніх прав, дозволені наступні операції: створення, видалення, перейменування, переміщення. Вищеназвані операції застосовувані до каталогів і файлів.
Найбільш істотна відмінність роботи клієнта з файловою системою HDFS від роботи з файловою системою загального призначення - це те, що при створенні файлу клієнт може явно вказати розмір блоку файлу (за умовчанням 64 Мб) і кількість створюваних реплік (за замовчуванням значення дорівнює 3) .