Открыть сервис

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 поддерживает вложенные монтирования: виртуальный каталог может указывать на другой виртуальный каталог, что позволяет создавать многоуровневые иерархии.

Источники

  1. Apache Hadoop Documentation: «ViewFs Guide» (официальная документация проекта).
  2. Tom White. «Hadoop: The Definitive Guide», 4th Edition, O'Reilly Media, 2015 (глава о ViewFs).
  3. Apache Hadoop JIRA — HADOOP-9150: «Add ViewFs to Hadoop Common» (первоначальная заявка на реализацию).
  4. Eric Sammer. «Hadoop Operations», O'Reilly Media, 2012 (раздел о федерации и ViewFs).
  5. Документация Cloudera: «Using ViewFs for Global Namespace» (руководство по настройке).

Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ*) — организация признана экстремистской и запрещена в РФ.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →