본문 바로가기

UCI GREAT Program

HDF5 ( Hierarchical Data Format )

HDF5란?

Hierarchical Data Format version 5를 뜻하는 HDF5에 대해서 알아보고자 한다. HDF란, 빅데이터 시대의 크고, 복잡한 데이터 집합을 다루기 위한 오픈소스 파일 형식이다. ( 운영체제의 제약을 거의 받지 않고, 대용량 데이터를 빠르게 저장하고, 쉽게 일부에 접근할 수 있게 해주는 고성능 데이터 포맷이다.)

이 HDF5는 'file directory' 구조를 사용하여 우리의 컴퓨터에서 다양한 파일을 다루는 것처럼, 유사한 구조화된 방법으로 파일 내의 데이터를 구성할 수 있다. 다만, 이 HDF5 format은 하나의 single file 내에 포함된 파일 시스템이다. 즉, 우리가 운영체제에서 사용하는 directory-file구조와 유사하게 group-dataset 구조를 사용해서, HDF5파일(single file- 하나 만들면 그 안에 파일 시스템이 존재하는 거)의 루트 그룹부터 트리구조로 다른 그룹과 데이터셋이 존재하게 할 수 있는 것이다.=. 한 가지 다른 점은 attribute인데, 이는 metadata로 group이나 dataset을 부연 설명하기 위해서 사용자가 정의하는 것을 의미한다. ( self-describing -> 아래에서 설명됩니다.)

즉, 우리는 하나의 HDF5 파일에 컴퓨터의 directory-file시스템과 유사하게 구성되는 방법을 통해서 다양한 종류의 데이터셋들을 저장할 수 있다는 것이다.

https://www.neonscience.org/resources/learning-hub/tutorials/about-hdf5

  • Group: A folder like element within an HDF5 file that might contain other groups or datasets within it.
  • Dataset: The actual data contained within the HDF5 file. Datasets are often (but don't have to be) stored within groups in the file.

Self-Describing Format

 HDF5는 self-describing 하다는 특징을 가지고 있다. 이게 어떤 의미일까? HDF에서 self describing이란, 각 group 혹은 dataset이 정확히 어떤 데이터인지를 묘사하는 emtadata와 연관되어 있다는 것이다.( attribute ) 그렇다면 어떻게 attribute를 구성해야 할까? 즉, 각 site group에 대한 정보를 file로 만들어야 할까?

몇 가지 예시를 들어보자.
1. 데이터셋의 데이터가 어떻게 수집되었는지에 대한 정보 ( ex- 온도 데이터 수집을 위해서 어떤 센서를 사용했는지에 대한 설명 같은 것)
2. 어떤 식의 preprocessing을 거친 데이터라던가 등의 정보 ( ex- 수집된 온도 데이터를 어떤 기간 동안 수집하고, 어떻게 averaging을 했는지 등등 )

neonscience라는 곳에서는 몇 가지 큰 구성 예시를 제공한다. 

  • The full name and X, Y location of the site
  • Description of the site.
  • Any documentation of interest.

그렇다면, 굳이 이러한 self describing format을 사용하는 이유는 무엇일까? 각 file site나 dataset에 적합한 메타데이터가 있다는 것은 별도의 추가적인 메타데이터 없이 자동화를 가능하게 한다는 것이다. 즉, Python이나 R 등을 이용해서 데이터셋의 메타데이터로부터 정보를 가져올 때, 이런 self-descriving foramt을 가졌을 경우 그 데이터셋으로부터 이미 연결되어 있는 메타데이터로부터 쉽게 데이터를 처리하기 위한 정보를 가져올 수 있다는 것이다.

https://www.neonscience.org/resources/learning-hub/tutorials/about-hdf5

HDF5를 사용하는 이유 ① - Efficient

사실 HDF5 format은 압축 형식의 일종이다. HDF5 파일에 포함된 데이터 전체는 그 전체 HDF5파일의 사이즈를 더 작게 하기 위해서 최적화된다. 하지만, 이렇게 압축이 되더라도, HDF5 파일들은 여전히 꽤 큰 데이터이다. 그렇다면 어떤 점에서 효율적인 것일까?

바로 앞서도 잠깐 언급했던, 데이터의 처리를 위해서 전체 데이터셋의 특정 subset들을 추출해 올 수 있다는 점 때문이다. HDF에서는 이러한 특성을 data slicing이라고 한다. 이것은 특정 데이터 subset을 처리하기 위해서 전체 데이터셋을 RAM에 읽지 않아도 된다는 것이다. 이러한 특성은 우리가 아주 큰 데이터셋들을 가지고 있더라도, 아주 효율적으로 해당 데이터를 처리할 수 있게 해주는 유용한 특성이다.

HDF5를 사용하는 이유 - Heterogeneous

HDF5파일들은 앞서도 언급했든 다른 타입들을 가진 데이터들을 HDF5라는 하나의 파일 안에 저장할 수 있다. 예를 들자면 특정 HDF5파일 내의 어떤 group, site는 integer형식과 text (string형식) 데이터셋들 각각을 포함할 수 있다. 또, 하나의 dataset 안에도 text와 integer형식의 데이터를 둘 다 저장할 수 있다. 

HDF5를 사용하는 이유 - Open Format

위와 같은 유용한 기능들을 제공하는 이러한 HDF5 format이 free open 되어있다는 점은 큰 장점이다. 이러한 HDF5는 파이썬 같은 오픈소스 프로그래밍 언어나 Matlab, IDL 같은 상용 프로그래밍 tool을 포함한 수많은 프로그램들에서 광범위하게 지원된다. HDF5 지원 라이브러리 및 무료 HDF5 viewer는 여기서 확인할 수 있다.