ViewFs
ViewFs — это распределённая виртуальная файловая система, входящая в состав экосистемы Apache Hadoop, предназначенная для обеспечения единой точки монтирования и глобального пространства имён (global namespace) для нескольких независимых кластеров Hadoop Distributed File System (HDFS) или других файловых систем, поддерживающих протокол HDFS. ViewFs позволяет клиентским приложениям обращаться к данным, физически расположенным в разных кластерах, как к единой иерархической структуре, скрывая географическое распределение и административное разделение хранилищ.
История и предпосылки создания
Развитие ViewFs связано с ростом масштабов корпоративных хранилищ данных на базе экосистемы Hadoop. К середине 2010-х годов крупные организации (например, Yahoo!, Facebook*, LinkedIn) столкнулись с необходимостью управлять десятками и сотнями кластеров HDFS, развёрнутых в разных центрах обработки данных (ЦОД) или облачных регионах. Каждый кластер имел собственное пространство имён (namespace) — иерархию каталогов и файлов, изолированную от других кластеров. Для пользователей и приложений это означало необходимость явно указывать, к какому кластеру относится путь (например, через префиксы hdfs://cluster1/data и hdfs://cluster2/data). Такая модель усложняла разработку, миграцию данных и обеспечение отказоустойчивости.
ViewFs была предложена как решение для создания единого «виртуального» пространства имён без изменения архитектуры самих кластеров HDFS. Первая реализация появилась в составе Apache Hadoop 2.x (примерно 2013–2014 годы) и была включена в дистрибутив как часть модуля hadoop-common. В отличие от других подходов к глобальному пространству имён (например, HDFS Federation или сторонних решений вроде Alluxio), ViewFs не требует модификации серверной части HDFS и работает исключительно на стороне клиента (Hadoop Client).
Архитектура и принцип работы
Клиентская виртуализация
ViewFs реализована как реализация абстрактного класса FileSystem в Java API Hadoop. Когда приложение (например, MapReduce, Spark или Hive) обращается к файловой системе по схеме viewfs://, клиентский код Hadoop загружает конфигурационный файл (обычно mountTable.xml), который описывает, как виртуальные пути сопоставляются с реальными путями в различных кластерах HDFS или других файловых системах (например, S3, WASB, ABFS). Это сопоставление называется таблицей монтирования (mount table).
Таблица монтирования (Mount Table)
Таблица монтирования представляет собой XML-файл, содержащий набор правил (mount points). Каждое правило определяет:
- Исходный путь (src) — виртуальный каталог в пространстве имён ViewFs.
- Целевой URI (dst) — реальный путь в одном из кластеров HDFS (например,
hdfs://cluster1/user/data) или другой файловой системе. - Режим монтирования — может быть «read-only» (только чтение) или «read-write» (чтение и запись).
Пример фрагмента таблицы монтирования:
``xml <configuration> <property> <name>fs.viewfs.mounttable.global.link./user</name> <value>hdfs://cluster1/user</value> </property> <property> <name>fs.viewfs.mounttable.global.link./data</name> <value>hdfs://cluster2/data</value> </property> </configuration> ``
В этом примере виртуальный путь viewfs://global/user будет прозрачно перенаправлен в каталог /user кластера cluster1, а viewfs://global/data — в каталог /data кластера cluster2. Клиентское приложение не знает о физическом расположении данных.
Поддерживаемые файловые системы
ViewFs может работать с любыми файловыми системами, для которых существует реализация FileSystem в Hadoop. Наиболее распространённые:
- HDFS (собственная файловая система Hadoop).
- LocalFileSystem (локальная файловая система узла).
- Amazon S3 (через S3A connector).
- Azure Blob Storage (WASB/ABFS).
- Google Cloud Storage (GCS).
Ключевые возможности
Единое пространство имён
Основное назначение ViewFs — предоставить приложениям единую точку входа (single namespace) для данных, разбросанных по разным кластерам. Это упрощает написание кода: вместо того чтобы в каждом запросе указывать конкретный кластер, разработчик использует виртуальный путь, а администратор управляет правилами монтирования.
Поддержка федерации (Federation)
ViewFs может быть использована совместно с HDFS Federation — архитектурой, в которой несколько NameNode управляют разными частями единого кластера HDFS. В этом случае ViewFs позволяет объединить пространства имён этих NameNode в одно виртуальное дерево.
Изоляция и безопасность
Таблица монтирования может быть настроена таким образом, чтобы разные группы пользователей видели разные виртуальные пространства. Например, для отдела продаж можно смонтировать только те каталоги, которые относятся к данным по клиентам, скрывая остальные. Это реализуется через разные конфигурационные файлы для разных пользователей или групп.
Гибкость при миграции
При переносе данных между кластерами (например, из старого ЦОДа в новый) администратор может изменить только таблицу монтирования, не меняя код приложений. Если старый кластер выводится из эксплуатации, достаточно перенаправить виртуальный путь на новый кластер.
Ограничения и недостатки
Отсутствие глобальной консистентности
ViewFs не обеспечивает транзакционную согласованность между разными кластерами. Если приложение записывает данные в два разных виртуальных каталога, которые физически находятся в разных кластерах, то в случае сбоя одного из кластеров данные могут оказаться в несогласованном состоянии. ViewFs не предоставляет механизмов двухфазной фиксации (2PC) или распределённых блокировок.
Нет поддержки переименования между кластерами
Операция rename (переименование) в ViewFs работает только в пределах одного физического кластера. Попытка переместить файл из одного виртуального каталога в другой, если они смонтированы на разные кластеры, приведёт к ошибке. Это связано с тем, что HDFS не поддерживает атомарное переименование между разными NameNode.
Зависимость от конфигурации
Корректная работа ViewFs полностью зависит от правильной настройки таблицы монтирования. Ошибка в конфигурации может привести к тому, что приложение будет обращаться к несуществующим путям или к данным не того кластера. Администратор должен тщательно синхронизировать конфигурацию на всех клиентских узлах.
Производительность
При каждом обращении к файловой системе клиентский код Hadoop должен разрешать виртуальный путь через таблицу монтирования. Хотя эта операция выполняется в памяти и занимает микросекунды, накладные расходы могут быть заметны при очень большом количестве операций (миллионы вызовов в минуту). Для критичных по производительности сценариев может потребоваться кеширование таблицы монтирования на стороне клиента.
Применение
Крупные корпоративные хранилища
ViewFs активно используется в компаниях, эксплуатирующих несколько кластеров Hadoop для разных целей: разработка, тестирование, продуктивная среда. Например, в Yahoo! (ныне Altaba) ViewFs применялась для объединения кластеров, расположенных в разных дата-центрах, в единое логическое хранилище.
Облачные среды
В облачных развёртываниях (AWS EMR, Azure HDInsight, Google Cloud Dataproc) ViewFs позволяет приложениям прозрачно работать с данными, хранящимися в разных облачных регионах или в разных сервисах (HDFS + S3 + Azure Blob). Это особенно актуально для гибридных архитектур, где часть данных остаётся в локальном HDFS, а часть переносится в облако.
Совместное использование с Apache Hive и Spark
ViewFs часто применяется в сочетании с Hive Metastore. Если таблицы Hive физически расположены в разных кластерах HDFS, ViewFs может предоставить единый путь для метаданных, что упрощает запросы типа SELECT * FROM sales JOIN inventory ON ..., где sales и inventory находятся в разных кластерах.
Сравнение с альтернативами
| Решение | Принцип | Требует изменений на сервере | Поддержка транзакций | Производительность |
|---|---|---|---|---|
| ViewFs | Клиентская виртуализация | Нет | Нет | Высокая (локальное разрешение путей) |
| HDFS Federation | Серверная федерация | Да (несколько NameNode) | Нет | Высокая |
| Alluxio | Кеширующий слой | Да (установка Alluxio) | Ограниченная | Средняя (зависит от кеша) |
| Apache Ranger + HDFS | Авторизация на уровне путей | Да (настройка Ranger) | Нет | Средняя |
Интересные факты
- ViewFs является частью модуля
hadoop-commonи не требует установки дополнительных демонов или служб — это полностью клиентская библиотека. - Название «ViewFs» происходит от «View File System» (файловая система представлений).
- В некоторых документациях ViewFs называют «HDFS View File System» или «Hadoop View File System».
- ViewFs поддерживает вложенные монтирования: виртуальный каталог может указывать на другой виртуальный каталог, что позволяет создавать многоуровневые иерархии.
Источники
- Apache Hadoop Documentation: «ViewFs Guide» (официальная документация проекта).
- Tom White. «Hadoop: The Definitive Guide», 4th Edition, O'Reilly Media, 2015 (глава о ViewFs).
- Apache Hadoop JIRA — HADOOP-9150: «Add ViewFs to Hadoop Common» (первоначальная заявка на реализацию).
- Eric Sammer. «Hadoop Operations», O'Reilly Media, 2012 (раздел о федерации и ViewFs).
- Документация Cloudera: «Using ViewFs for Global Namespace» (руководство по настройке).
Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ*) — организация признана экстремистской и запрещена в РФ.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →