본문 바로가기

[Data Engineering]/[Sqoop]

[Sqoop] Parquet File

728x90

[Parquet File]

 

Apache Parquet

Apache Parquet is a columnar storage format available to any project in the Hadoop ecosystem, regardless of the choice of data processing framework, data model or programming language.

parquet.apache.org

  Parquet(파케이)는 빅데이터를 저장하는 방식(파일포멧) 중 하나이다. 빅데이터 에코 시스템에서 유명한데, 데이터를 효율적으로 저장할 수 있다. 그렇다면 Parquet의 장점은 무엇일까?  간단하게 세가지 정도를 꼽아볼 수 있다.

  • 빠르게 읽을 수 있다
  • 압축률이 좋다
  • 특정 언어,프레임워크에 종속되지 않는다

 엄밀히 말하면 언어,프레임워크는 효율적으로 '저장'하는 것과는 거리가 있지만 '효율적'이라는 의미에서 중요하다. 아래에서 설명하는 것 처럼 Parquet은 Columnar file format이기 때문에, 위의 세가지 중 빠르게 읽고, 압축률이 좋다는 것을 만족한다. 그러면 Columnar format이라는 것은 무엇일까? 

기존의 Row-based 구조에 비해 Columnar format은 다음과 같이 저장 자체를 유사한 칼럼끼리 모아서 저장을 하게 된다. 굳이 설명하자면 인간이 생각하는 '스키마'와 비슷한 구조이다. 얼핏 보면 별거 아닌 것 같아 보이지만, 다음과 같은 세가지 장점이 생기게 된다.

1. 압축률이 더 좋다. 유사한 데이터들이 모여있기 때문에 데이터들이 많이 모이면 압축하기가 편하기 때문이다.
2. I/O 사용률이 줄어든다. 데이터를 읽어 들일 때 일부 컬럼만을 스캔하기 때문이다. 따라서 특정 칼럼에 대해서만 디스트에 접속하기 때문에 디스크에 대한 I/O 사용률이 확연히 줄어든다.
3. 컬럼별로 적합한 인코딩을 사용할 수 있다. 각 컬럼의 데이터들은 동일한 유형의 데이터를 저장하기 때문에 적절한 인코딩을 쉽게 적용할 수 있다.

아파치 재단에서 소개하는 Parquet은 다음과 같다. 

Apache Parquet is a columnar storage format available to any project in the Hadoop ecosystem, regardless of the choice of data processing framework, data model or programming language.

  • Columnar file format
  • Efficient compression and encoding schemes
  • Efficient to work with query based on selected columns
  • Efficient & performant in storage & processing
  • Data & schema are tied together

  그런데 Parquet의 단점은 없을까? 궁금해서 찾아봤는데 몇가지 단점이 존재했다.  먼저 특정 library를 사용한 application 파케이를 생성하고 읽기 위해서는 Spark 혹은 parquet관련 library를 사용한 application이 필요하다. 또한 파케이는 칼럼 기반 포멧이기 때문에 한개의 데이터를 file단위로 읽어서 append & flush하는 것이 불가하다고 한다. 이를 위해서는 파케이 file 자체를 읽어서(메모리에 올려서) row를 append한 뒤에 다시 저장을 반복해야합니다.

 

[Parquet File 사용하기]

단순히 --as-parquetfile 테그만 추가하면 Parquet파일로 변환할 수 있다. 역시 Map-reduce 과정을 이용한다.

sqoop import \
> --connect jdbc:mysql://localhost/retail_db \
> --username root \
> --password admin123 \
> --table customers \
> --target-dir /user/parquet/ \
> --as-parquetfile

  그러면 실제 저장된 결과 파일과, parquet 파일을 열어보면 어떤 모습일지 열어보도록 하자. 까보면 다음과 같다. 데이터는 압축된 형태로, 마지막에는 데이터의 스키마가 나타나게 된다. 이게 parquet file의 모습인데 그러면 parquet file은 어떻게 확인할 수 있을까?

 여러가지 방법이 있는데, 바로 parquet-tools를 이용하면 된다! Parquet tool은 다양한 언어와 프레임웍에서 지원하며, 심지어 brew로 설치도 가능하다. 나는 jar형태의 parquet tool을 gcp에 올려서 사용했다.

 

Parquet Tools: Apache Hadoop – mtitek.com

Usage - Usage (hadoop): hadoop jar parquet-tools-*.jar COMMAND [GENERIC-OPTIONS] [COMMAND-OPTIONS] PARUQET-FILE-PATH - Usage (local): java -jar parquet-tools-*.jar COMMAND [GENERIC-OPTIONS] [COMMAND-OPTIONS] PARUQET-FILE-PATH Commands: cat Prints out conte

www.mtitek.com

 

hadoop jar parquet-tools-1.10.0.jar cat --json /user/parquet/63ef698b-3612-45bd-973e-df78b7482049.parquet

tool을 이용해서 열어본 parquet file

간단하게 메타데이터만 확인하는 것도 가능하다.

hadoop jar parquet-tools-1.10.0.jar meta /user/parquet/63ef698b-3612-45bd-973e-df78b7482049.parquet

 

다음에는 또 다른 File format인 Avro에 대해 다뤄보도록 한다. 모두 즐거운 추석 보내시길!

 

728x90

'[Data Engineering] > [Sqoop]' 카테고리의 다른 글

[Sqoop] Avro File  (0) 2021.09.21
[Sqoop] Warehouse / Target Dir  (0) 2021.09.20
[Sqoop] Sqoop-Intro  (0) 2021.09.19