HDF — сжатый формат хранения данных¶
HDF (англ. Hierarchical Data Format, «иерархический формат данных») — семейство форматов файлов для хранения и организации больших объёмов структурированных данных, разработанное Национальным центром суперкомпьютерных приложений (NCSA) при Иллинойсском университете в Урбане-Шампейне. HDF поддерживает иерархическую (деревовидную) структуру хранения, позволяющую объединять в одном файле разнородные данные — многомерные массивы, табличные данные, изображения, метаданные, — сопровождать их описаниями и обращаться к ним по имени.
¶История
Первая версия формата HDF была выпущена NCSA в 1992 году. Формат создавался для научных сообществ, работающих с большими объёмами наблюдательных данных — в первую очередь в астрономии, метеорологии и океанографии, где требовалось единое решение для хранения многомерных массивов сопровождаемых метаданными.
В 2000 году была выпущена HDF4 (HDF Release 4), а в 2002 году — HDF5, полностью переработанная версия с новой архитектурой хранения. HDF5 унаследовал основные идеи предшественника, но получил собственную систему групп, более гибкую модель ссылок и улучшенную производительность. Обе версии формата поддерживаются и развиваются HDF Group — некоммерческой организацией, выделенной из NCSA.
¶Структура файла
Внутри файла HDF данные организованы в виде дерева, аналогичного файловой системе. Основные элементы:
- Группы — контейнеры, объединяющие другие группы и объекты; эквивалент каталогов в файловой системе.
- Датасеты (datasets) — многомерные массивы однотипных данных (целых, вещественных, символьных), сопровождаемые атрибутами.
- Атрибуты — небольшие пары «имя-значение», описывающие датасеты или группы (единицы измерения, координатные системы, история обработки).
- Ссылки — механизм связей между объектами внутри файла, включая жёсткие ссылки на объекты и мягкие (символические) ссылки на путь.
Такая организация позволяет хранить в одном файле и сами данные, и их описание, что устраняет необходимость в отдельных вспомогательных файлах метаданных.
¶HDF4 и HDF5
HDF4 поддерживает несколько типов объектов, включая растровые изображения, наборы данных с подмножествами (SDS) и компонентные данные. Формат широко используется в NASA для хранения данных спутниковых наблюдений.
HDF5 решает ряд ограничений предыдущей версии: поддерживает произвольную вложенность групп, данные практически неограниченного размера, параллельный ввод-вывод через MPI, сжатие данных (алгоритмы GZIP, SZIP, без потерь). В HDF5 отсутствует жёсткая привязка к фиксированным типам данных, что делает формат более гибким.
Обе версии формата несовместимы между собой: файлы HDF4 и HDF5 имеют разные сигнатуры и структуру хранения.
¶Применение
HDF является де-факто стандартом в рядах научных областей:
- Астрономия и астрофизика — формат HDF5 лёг в основу спецификации FITS-совместимого хранения, используется в проектах космических обсерваторий.
- Земные науки — данные спутниковых наблюдений (MODIS, Landsat), климатические модели, сейсмические данные.
- Физика высоких энергий — формат ROOT, разработанный в ЦЕРН, концептуально близок к HDF.
- Машинное обучение — HDF5 применяется для хранения больших наборов обучающих данных, в частности в библиотеке TensorFlow (формат TFRecords концептуально родственен HDF5).
В России HDF активно используется в академических и прикладных исследованиях — при обработке данных дистанционного зондирования Земли, в задачах вычислительной физики и хранении результатов моделирования.
¶Программные реализации
Существуют официальные библиотеки для C, C++, Fortran, Java и Python (пакет h5py и PyTables). Поддержка HDF5 реализована в большинстве научных вычислительных сред — MATLAB, GNU Octave, R, Julia, а также в системах визуализации ParaView и VisIt.
¶См. также
- FITS
- NetCDF
- Parquet
- Файловые форматы хранения научных данных
¶Источники
- HDF Group. HDF5 File Format Specification.
- NCSA. HDF4 Reference Manual.
- The HDF5 Data Model, File Format and API.
- А. Колесников. Форматы хранения больших научных данных.
