DataNode
DataNode — это вычислительный узел в распределённых файловых системах (например, Hadoop Distributed File System, HDFS), отвечающий за хранение, чтение и запись блоков данных по запросу клиентов или управляющего узла (Namenode). DataNode является ключевым компонентом архитектуры «главный-подчинённый» (master-slave), где он выполняет роль рабочего элемента, обеспечивающего отказоустойчивость и масштабируемость хранения больших объёмов данных (big data).
Архитектура и принцип работы
Роль в распределённой файловой системе
В экосистеме Apache Hadoop DataNodы вместе с Namenode образуют основу HDFS. Namenode управляет метаданными (имена файлов, структура каталогов, соответствие блоков данным), а DataNodы физически хранят блоки данных (обычно размером 128 МБ или 256 МБ) на локальных дисках. Каждый блок реплицируется на несколько DataNode (обычно на 3) для обеспечения отказоустойчивости.
При чтении файла клиент сначала обращается к Namenode за списком блоков и адресами их хранения, после чего напрямую взаимодействует с соответствующими DataNodами. При записи клиент запрашивает у Namenode список подходящих DataNode для размещения реплик, затем последовательно передаёт данные через конвейер (pipeline).
Внутреннее устройство DataNode
DataNode реализован как Java-процесс, который:
- периодически отправляет heartbeat-сообщения (пульс) Namenode (по умолчанию каждые 3 секунды);
- отправляет отчёты о состоянии блоков (blockreport) при запуске и затем каждый час;
- создаёт и удаляет файлы блоков на локальной файловой системе (обычно ext4 или XFS);
- ведёт журнал операций (edit log) для восстановления после сбоев.
Файлы блоков хранятся в каталоге dfs.datanode.data.dir, а метаданные о контрольных суммах — в файлах .meta (организация признана экстремистской, деятельность запрещена в РФ).
Управление и мониторинг
Запуск и конфигурация
DataNode запускается командой hdfs datanode или через start-dfs.sh. Основные параметры задаются в файле hdfs-site.xml:
dfs.datanode.data.dir— список каталогов для хранения блоков;dfs.datanode.max.transfer.threads— максимальное число потоков для передачи данных (по умолчанию 4096);dfs.datanode.handler.count— количество обработчиков запросов (по умолчанию 10).
В современных версиях Hadoop (начиная с 2.x) DataNode поддерживает «тома» (volumes) — логические единицы, соответствующие разным дискам. Это позволяет балансировать нагрузку между физическими носителями.
Балансировка и восстановление
При выходе из строя одного DataNode Namenode через некоторое время (таймаут по умолчанию 10 минут) помечает его блоки как нереплицированные и запускает процесс репликации на живые DataNode. Утилита hdfs balancer позволяет равномерно распределить блоки между узлами кластера.
Безопасность и контроль целостности
Проверка данных
DataNode постоянно проверяет контрольные суммы (CRC32C) сохранённых блоков. При каждом чтении клиент может запросить проверку, а регулярные фоновые сканы (block scanner) выявляют повреждённые блоки. Обнаруженные битые блоки сообщаются Namenode, который инициирует их восстановление с других реплик.
Аутентификация
Начиная с Hadoop 2.0, DataNode поддерживает Kerberos-аутентификацию. Без неё (в режиме простой аутентификации) DataNode принимает запросы только от Namenode с совпадающим IP-адресом и клиентов с правильным идентификатором блока.
Классификация DataNode
По роли в архитектуре
- Primary DataNode — не является отдельным термином; в кластерной архитектуре все DataNode равноправны, хотя для конкретной операции записи может быть назначен «первый» DataNode в конвейере.
- Edge Node — компьютер, на котором работают клиентские приложения, может не хранить данные, но иметь доступ к DataNode.
- Rack-aware DataNode — узлы, сгруппированные по стойкам (rack) для оптимизации сетевого трафика.
По типу хранилища
- HDD DataNode — традиционные жёсткие диски (SATA, SAS);
- SSD DataNode — твердотельные накопители для ускорения доступа;
- RAM DataNode — экспериментальные решения (например, Apache Ignite) с хранением данных в оперативной памяти.
Применение в различных технологиях
Apache HDFS
DataNode — базовая единица хранения во всех дистрибутивах Hadoop (Cloudera, Hortonworks, MapR). Кластеры могут включать от трёх до нескольких тысяч DataNode, каждый из которых обслуживает 10–50 ТБ данных.
Apache HBase
В HBase DataNode используется как нижний слой хранения данных через HDFS. RegionServer HBase работает поверх HDFS, а DataNode обеспечивает репликацию и отказоустойчивость.
Apache Spark и MapReduce
При выполнении задач Spark или MapReduce DataNode предоставляет данные для локальной обработки (data locality), минимизируя сетевые передачи. Механизм «вычисления рядом с данными» (compute near data) — ключевое преимущество HDFS.
Облачные и коммерческие реализации
- Amazon EMR — управляемые кластеры Hadoop, где DataNode работают на EC2-инстансах с EBS-дисками;
- Microsoft Azure HDInsight — использует DataNode на виртуальных машинах Azure;
- DataNode в Kubernetes — проект Apache Hadoop on Kubernetes (Kubernetes Operator) позволяет разворачивать DataNode в контейнерах.
Преимущества и ограничения
Преимущества
- Отказоустойчивость — репликация блоков (обычно 3 копии) позволяет переживать выход из строя нескольких узлов;
- Масштабируемость — добавление DataNode увеличивает ёмкость кластера без остановки работы;
- Производительность — параллельный доступ к данным через конвейерную запись;
- Проверка целостности — автоматические сканы и контрольные суммы защищают от тихих ошибок данных.
Ограничения
- Непригодность для малых файлов — каждый файл требует одного блока, что ведёт к неэффективному использованию метаданных Namenode;
- Ограниченная модель записи — однократная запись (write-once) и только добавление (append-only);
- Чувствительность к задержкам сети — в гетерогенных сетях может страдать производительность;
- Единая точка отказа Namenode — хотя с Hadoop 2.x появились Active/Standby Namenode, проблемы с метаданными могут парализовать весь кластер.
История и развитие
Зарождение идеи (2000-е)
Концепция DataNode восходит к проекту Google File System (2003), где описан чанк-сервер (chunk server). Разработка Hadoop началась в 2005 году под руководством Дага Каттинга. Первая версия HDFS (0.1.0) вышла в 2006 году и уже включала DataNode с репликацией.
Эволюция функциональности
- 2008-2010 — добавлена поддержка блоков переменного размера и балансировщик;
- 2012 — HDFS High Availability устранила единую точку отказа Namenode, повысив надёжность DataNode;
- 2015 — в Hadoop 2.7 появилась поддержка хранилищ с разной производительностью (heterogeneous storage);
- 2018-2020 — в Hadoop 3.x внедрены erasure coding (коды стирания), уменьшающие избыточность репликации, и улучшена поддержка SSD.
Современные тенденции
В 2020-е годы развитие DataNode сосредоточено на:
- интеграции с объектными хранилищами (S3, Azure Blob) как прозрачных бэкендов (Apache Ozone);
- использовании Ceph RBD для хранения блоков;
- внедрении сжатия данных на уровне DataNode (Zstd, LZ4);
- повышении производительности через RDMA (Remote Direct Memory Access) и NVMe-oF.
Источники
- Apache Hadoop Documentation — «HDFS Architecture Guide» (The Apache Software Foundation)
- White, T. (2020) — «Hadoop: The Definitive Guide», 4th Edition (O'Reilly Media)
- George, L. (2016) — «HBase: The Definitive Guide» (O'Reilly Media)
- Ghemawat, S., Gobioff, H., Leung, ST. (2003) — «The Google File System» (ACM SIGOPS Operating Systems Review)
- Официальная документация Apache Hadoop 3.x — «DataNode Administration» (hadoop.apache.org)
- DataStax (2018) — «Cassandra vs HDFS: DataNode Architecture Comparison» (DataStax Docs)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →