빅데이터를 처리하고 관리하는데 있어 가장 중요한 관점은 어떻게 비용 효율적으로 데이터를 저장하고 관리 할지에 대한 부분과 어떻게 하면 빠르게 많은 데이터를 처리할 수 있는지에 대한 영역으로 나눌 수 있을 것 입니다. 적은 비용으로 많은 데이터를 저장 할 수 있고 이어서 적은 컴퓨팅 파워로 빠르게 데이터를 처리할 수 있는 이 두가지 내용을 모두 만족하는 솔루션이 있으면 좋겠지만, 아쉽게도 두가지를 모두 최적으로 만족하는 방법은 없습니다.
그렇다면 저희가 기술을 선택할 때는 어떠한 관점으로 접근을 해야 할까요? 우리가 만들고자 하는 시스템과 주변 상황을 잘 이해할 필요가 있습니다. 즉, 우리 시스템의 요구사항에 맞게 어떠한 영역에 장점은 살리고 어떤 부분에서는 조금 손해를 보는 것이죠. 그렇게 저희에게 맞는 최적의 기술 선택을 하시면 됩니다.
빅데이터 저장 및 처리를 하기 앞서, 데이터 플랫폼의 데이터 파일 형식을 선정하는 것은 아주 중요한 일 입니다. 어떤 데이터 파일 형식을 선정하는지에 따라 우리 시스템의 운영 비용과 처리 속도에 영향을 많이 미치기 때문입니다. 그래서 이번에는 다양한 빅데이터 파일 형식에 대해 알아보고 장/단점을 정리해보고자 합니다.
Parquet(파케이)
Apache Hadoop 에코시스템(Twitter와 협력하여 Cloudera에서 지원) 용으로 설계된 Column 기반의 데이터 스토리지 형식 입니다. 특히 Spark로 작업하는 데이터 과학자 및 데이터 엔지니어 사이에서는 인기가 많은 데이터 형식 입니다.
Parquet는 Spark의 기본 데이터 파일 형식 이며, 분석 작업을 위해 Query를 실행 할 때 장점을 극대화 할 수 있습니다. 분석 작업 또는 데이터 처리 작업중 특정 Column을 대상으로 하는 작업이 많은 경우 최고의 성능을 경험하실 수 있게 됩니다. 이것은 Parquet가 Column 기반으로 데이터를 효율적으로 저장 및 관리하고 있기 때문에 데이터 처리시 적은 메모리와 높은 성능을 제공할 수 있게 됩니다.
파케이 파일 구조 알아보기
구분 | 내용 |
헤더 | 파케이 포맷의 파일을 의미하는 4byte의 'PAR1'의 정보 |
꼬리말 | 포맷 버전, 스키마 정보, 모든 블록에 메타 정보 |
블록 | 1. Row Group 정보 저장 2. Row Group은 Row을 이루고 있는 Column 데이터를 포함한 Column Chunk로 구성되어 있다. 3. Column chunk는 여러개의 페이지로 구성되어 있다. 4. 페이지에는 동일한 Column에 정보들만 포함된다. |
Column 기반의 데이터 저장
위에서 언급한 Column 기반의 데이터 저장에 대해 알아보자.
위 그림에서 보는 것과 같이 대부분의 데이터 파일 형식은 Row 기반으로 데이터를 저장하게 된다.
이렇게 Row 기반으로 데이터를 저장하게 되면, 각 Column별로 상이한 데이터 유형과 사이즈가 혼합되어 있게 되기 때문에 데이터 저장에 효율을 극대화하기 어렵다. 그리고 필요한 Column들만 선택하여 분석하고자 하는 경우에는 모든 Row 데이터를 읽어와 필요한 부분을 찾거나 처리해야 하기 때문에 데이터 처리 성능이 떨어지고 필요로 하는 자원 또한 많아지게 된다.
이에 반해, Column 기반으로 데이터를 저장하게 되면, 동일한 데이터 유형끼리 데이터를 모아서 관리할 수 있게 되기 때문에 저장 및 관리에 용이하며, 필요한 Column들을 추출하는데도 아주 간편하게 된다. (Parquet, ORC)
ORC(Optimised Row Columnar)
스키마를 포함하는 Parquet와 유사한 Column 기반 데이터 스토리지 형식이다.
Parquet와 ORC 모두 유사한 압축률을 제공 하지만, ORC가 더 압축 효율적이라는 의견이 많다.
ORC 파일의 데이터는 독립적인 데이터 Stripe로 구성된다. 각각 고유한 별도의 인덱스, Row Data 및 Footer로 구성되어 있다. HDFS에서는 ORC 파일을 이용시 효율적인 읽기 작업이 가능해 진다.
"그렇다면 언제 Parquet와 ORC를 사용하면 되는거죠?"
HIVE에서 작업하는 경우 ORC를 사용하는 것을 권장합니다. (ORC는 HIVE에 최적화 되어 있습니다)
SPARK로 작업하신다면, Parquet를 사용하십시요. (Spark는 기본 데이터 형식을 Parquet로 제공할 정도로 최적화 되어 있습니다.)
AVRO(아브로)
AVRO는 행 기반 스토리지 형식입니다. JSON 데이터를 사용하여 데이터 유형 및 스키마를 정의하고 데이터를 바이너리 형식(축약)으로 저장하여 데이터 저장 공간을 효율적으로 사용 가능하게 합니다.
Parquet 및 ORC에 비해 압축 효율은 떨어지지만 쓰기 속도는 더 빠릅니다.
AVRO의 주요 이점은 스키마 진화에 대한 지원 입니다. 즉, 데이터 스키마가 시간이 지남에 따라 진화함에 따라 AVRO는 추가, 제거 또는 변경된 필드를 허용하여 이러한 변경에 대한 처리를 가능하게 합니다.
AVRO는 쓰기 집약적인 빅데이터 작업을 수행하는 데 더욱 효율적입니다.
압축
데이터 처리 성능을 더욱 높이고 싶다면, 분할 가능한 압축 유형(LZO, LZ4, BZIP2 and SNAPPY)을 선택하시면 됩니다. 그렇지 않고 스토리지 비용을 더욱 줄이고 싶다면, GZIP과 DEFLATE와 같은 비분할형 압축 유형을 사용하시면 됩니다.
GZIP은 평균적으로 분할 가능한 압축 유형에 비해 30% 더 나은 압축률을 보인다고 합니다. 자주 엑세스 하지 않는 데이터는 GZIP을 사용하는 것이 좋겠죠?
'빅데이터' 카테고리의 다른 글
Grafana Loki 개념 잡기! (0) | 2024.05.03 |
---|---|
OpenTelemetry 알아보기!! (0) | 2023.12.14 |
[빅데이터] 데이터 품질 검증 알아보기(AWS Deequ & Glue Data Quality) (0) | 2023.04.13 |
[빅데이터] 데이터 플랫폼 스키마 관리 하기 (0) | 2023.04.04 |
[빅데이터] 메타데이터에 대해 알아보자 (0) | 2023.04.03 |