Medium에 기재된 ‘Big Data File Formats, Explained’ 글을 토대로 우리 데이터 엔지니어들은 어떤 기준으로 파일 포맷을 선택해야하는지, 빅데이터 세상에서 주로(?) 사용되는 파일 포맷에는 어떠한 것들이 있고, 어떤 장/단점을 가지고 있는지에 대해서 정리한 글이다.

서론

우리는 어떤 기준으로 DW에 저장된 데이터들의 포맷을 정해야할까? 요구사항은 매우 다양할 수 있다. 왜냐하면 데이터의 크기가 사용할 데이터의 특성?에 따라서 요구사항이 달라질 수 있다. 여기서 모든 케이스를 보는 건 너무 다양하고 복잡하기 때문에 우리가 주로 만날 수 있는? 시나리오를 토대로 알아보자.

요구사항

요구사항을 충족하는 데이터 포맷의 특징은? 데이터를 저장하는데 비용 절감을 할 수 있어야 하고, 데이터의 압축률이 좋아야 하고, 빠르게 읽어야 하고, 특정 언어에 종속되지 않아야 한다.

왜냐하면 우리의 물리적 서버에 하드 디스크를 꽂을 수 있는 슬롯은 유한적이다. 그리고 하드 디스크의 용량을 늘릴 수 한계치도 있다. 이 부분을 넘어 버리면.. 결국 하나의 노드(물리적 서버)를 더 늘리는 대안 밖에 없다.

그런데 이 대안에는 여러가지 복잡한 작업?(실은 매우 귀찮은 작업이다..ㅋㅋ)과 비용이 발생한다. 그래서 빅데이터를 운영하는데 데이터를 저장하는 포맷 또한 매우 중요하다. 그래서 우리는 이제부터 파일 포맷에 대해서 알아보자!

본론

빅데이터 세상에서 가장 많이 사용되는 4가지 데이터 포맷에 대해서 알아보자. Parquet, ORC, AVRO의 가장 큰 특징은 data만 가지고 있는 것이 아니라, Schema 정보까지 가지고 있다는 점이다. 따라서 데이터를 Load 하거나 데이터를 분할하여 더 효율적으로 처리하는 등의 작업이 훨씬 쉽다. 단, JSON은 이 부분을 제공하지 않는다.

  1. Parquet

    Parquet(파케이)는 하둡 에코 시스템을 위해서 디자인된 열 기반 데이터(column-oriented data) 스토리지 포맷이다. 컬럼 기반으로 데이터를 저장하고 관리한다.

    Spark에서 Default로 파케이 형태의 파일 포맷을 사용하고 있다.

    그래서 Hadoop 기반에 Spark를 이용한 ETL or ELT를 적용하고 있거나, ML 라이브러리를 Spark를 사용한다면 parquet 적용을 좀 더 고려해보는 것이 좋을 것 같다.

    컬럼기반으로 데이터를 저장하는 경우, 데이터를 미리 컬럼 단위로 압축 시키고, 필요한 컬럼만 빠르게 읽고 집계하는데 빠르게 처리할 수 있다는 장점을 가지고 있다.

    스크린샷 2023-07-05 오후 5.20.17.png

    스크린샷 2023-07-05 오후 5.20.25.png

    스크린샷 2023-07-05 오후 5.20.30.png

  2. ORC

  3. AVRO

    Query 성능을 향상시키기위해서 데이터가 인덱싱 되는 Row 기반(row-oriented) 스토리지 포맷이다.

    JSON 데이터를 사용하여 데이터 유형 및 스키마를 정의하고 데이터를 디스크 공간에 도움이 되는 바이너리 형식(축약)으로 직렬화되서 저장한다. 그래서 개발 시,

    특정 언어에 종속되지 않는 언어 중립적 데이터 직렬화 시스템을 가지고 있고, 하둡의 Writable의 주요 단점이 언어 이식성 해결을 위해서 개발되었다.

    Parquet 및 ORC와 비교할 때 압축 효율은 떨어지지만, 쓰기 속도는 더 빠르다. 그리고 AVRO는 스키마의 변화를 지원한다. 시간이 지남에 따라, 스키마에 대한 추가/수정/삭제가 이루어 질 수 있다. 이 때 AVRO는 스키마의 변화(추가/수정/삭제)를 적용할 수 있는 기능을 제공한다.

    장점

  4. JSON