BLOG

Cribl Stream을 사용하여 파케이 포맷 변환 후 S3로 스트리밍하기
작성일: 2023-03-13

파케이 포맷과 Cribl Stream

 

 

✅파케이란?

수집된 데이터는 분석, 모니터링, 보안 관제 등의 목적으로 사용하는 도구로 전송되거나 보존과 추후 분석을 위해 객체 스토리지에 저장됩니다.

객체 스토리지에 대용량의 데이터를 압축하지 않고 모든 raw 파일(원본 파일)을 저장 시 파일 크기가 커져 데이터 처리 속도와 저장 비용이 증가하게 됩니다.

 

Twitter는 대표적인 SNS 회사 중 하나로서 HDFS를 사용 중임에도 불구하고 SNS의 데이터를 저장할 때 너무 많은 디스크를 소모하여 데이터 사이즈를 줄일 수 있는 파일 포맷인 파케이 개발에 참여했습니다. 파케이란 하둡 생태계에서 많이 사용되는 저장 파일 포맷이며 일반적인 행 기반 포맷이 아닌 컬럼 기반 (또는 열 기반) 포맷입니다.

 

 

[컬럼 기반 압축 방식과 행 기반 압축 방식 차이]

 

 

✅컬럼 기반 포맷으로 저장하는 이유


컬럼 기반 저장 포맷인 파케이의 목적은 컬럼 기반 데이터베이스와 같이 컬럼 단위로 파일을 압축시켜 필요한 컬럼 데이터만 디스크로부터 읽어 I/O를 낮추고 압축률을 높여 데이터 크기를 줄이는 것에 있습니다.

 

 

[Columnar vs Row-based]

 

 

✅파케이 포맷의 장점

 

– 높은 압축률: 컬럼 단위로 구성하면 데이터가 더 균일하게 저장되어 압축률이 높아집니다.

– 낮은 I/O: 필요한 컬럼만 조회 시 선택되지 않은 컬럼의 데이터는 I/O가 발생하지 않습니다.

– 각 컬럼에 동일한 데이터 타입이 저장되기 때문에 컬럼별로 적합한 인코딩을 사용할 수 있습니다.

 

 

✅파케이 포맷과 Cribl Stream

 

파케이 포맷 파일은 다른 파일 형식과 비교했을 때 상대적으로 높은 압축률을 보여줘 파일 크기를 줄여 용량과 비용 측면에서 이점을 제공합니다. 그래서 원본 데이터 대비 얼마나 파일 크기를 줄일 수 있는지 확인해보았습니다.

 

하지만 수집된 데이터를 파케이 포맷으로 변환하기 위해선 전 처리 과정에 인력과 시간이 필요하기 때문에 이를 쉽게 변환하고 업무의 오버헤드를 줄일 수 있는 솔루션이 필요합니다.

 

[파일 크기 비교, 출처: https://butter-shower.tistory.com/245]

 

그래서 GUI 환경에서 수집된 데이터를 목적지로 전송함과 동시에 파케이 포맷으로 별도의 코드 작성 없이 변경할 수 있는 Cribl Stream 솔루션을 사용했습니다.

 

 

Cribl Stream 소개

 

(!) Cribl Stream은 포맷, 크기, 소스와 상관없이 수집된 데이터를 구문 분석, 노이즈 제거, 마스킹, 보강 등의 변환 처리 후 목적지로 전송 하는 데이터 스트림 프로세싱 솔루션입니다.

 

 

               [Cribl Stream]

 

 

✅Cribl Stream을 사용하여 파케이 포맷 변환 후 S3로 스트리밍하기

 

  • 테스트 환경
    이번 테스트에서는 상대적인 확인을 위해 Cribl Stream의 Multi-destination 기능을 사용하여 각각 원본 파일과 파케이 파일을 S3에 전송하고 저장했습니다.

 

(!) Cribl Stream은 90여개의 커넥터(솔루션과의 통신 모듈)를 제공하고 있어 AWS Athena에서 파케이, CSV 등 다양한 포맷을 쿼리할 수 있는 S3를 목적지로 선택했습니다.

 

수집된 데이터가 파케이 파일과 원본 파일로 저장 되기까지의 과정은 다음과 같습니다.

 

  1. 라즈베리 파이에 부착된 센서로부터 생성되는 Application log를 FluentBit로 수집
  2. FluentBit로 수집되는 실시간 데이터를 Cribl Stream에서 지원하는 Syslog 커넥터를 사용해 Cribl Stream으로 전송
  3. Cribl Stream에서 데이터를 분리된 S3 버킷에 한 곳은 파케이로 압축 후 또다른 곳에는 원본 데이터를 전송

 

[테스트 환경 아키텍처]

 

(!)
– Test environment: AWS
– Data source (Type): Application log (Sound sensor logs from Raspberry Pi)
– Data destination: S3
– Data format used: Parquet, Raw

 

 

✅데이터 source


Cribl Stream 포털에 접속 후 Syslog 커넥터를 선택한 후 Raspberry Pi Sensor로부터 수집되는 데이터를 실시간으로 확인했습니다.

 

            [Cribl Stream: Syslog 커넥터 선택 후 필요한 설정 값 입력]

 

 

            [Cribl Stream: 실시간으로 수집되는 데이터 및 내용 확인]

 

 

이번 테스트에서 원본 데이터를 사용하기 위해 데이터 수집의 첫 번째 단계(pre-processing)에서 Stream 기능을 사용하여 민감한 정보의 마스킹과 Key-Value 값의 구문 분석 등 변환 처리를 하지 않았습니다.

 

 

✅데이터 destination


S3 커넥터를 선택 후 각 파케이와 raw 포맷으로 전송될 커넥터를 설정합니다. 그리고 추후 각 데이터 파일의 용량을 확인하기 위해 S3 버킷을 분리해서 데이터를 전송했습니다.

 

[Cribl Stream: 파케이와 원본 데이터의 destination 설정]

 

 

[AWS S3: 저장되는 데이터 포맷별 S3 버킷 분리]

 

 

✅처리 과정

 

  • 데이터 다듬기
    Data Source의 원본 데이터를 확인해보면 모든 정보가 한 줄로 출력 되고 불필요한 필드들도 포함되어 있어 파케이 포맷으로 변환 전 구문 분석, 노이즈 제거, 마스킹을 적용했습니다.

 

(!) 사용한 변환 작업 리스트
– Parser : 한줄로 출력되는 데이터를 필드별로 구문 분석
– Eval :  불필요한 필드 삭제
– Mask : 주소 정보를 마스킹

 

 

[Cribl Stream: 구문 분석, 노이즈 제거, 주소 정보 마스킹 적용]

 

Cribl Stream을 사용하면, 실시간 데이터를 원하는 수만큼 추출하여 Stream 내에 저장할 수 있고 해당 데이터로 변환 처리를 테스트할 수 있습니다. 또한, 필요한 변환 기능들을 옵션에 맞게 설정 값만 입력하거나 이미 제공된 옵션만 선택하면 되어 관련 규칙들을 짧은 시간 안에 적용할 수 있습니다.

 

  • 데이터 포맷 변경
    S3 커넥터를 각각 설정할 때, 목적에 맞게 Data format* 옵션에서 각각 파케이 포맷과 Raw 포맷을 선택했습니다.

 

[Cribl Stream: S3 커넥터 설정에서 포맷을 선택]

 

 

  • 데이터 전송
    마지막으로 선택한 Data Source(Syslog 커넥터), 목적지(S3 커넥터), 변환 규칙을 선택하여 파케이 포맷과 원천 데이터를 처리하는 각각의 파이프라인을 구현했습니다.

 

[Cribl Stream: Route 설정]

 

  • 데이터 크기
    Cribl Stream의 monitoring 메뉴에서 일정 시간 동안 각각 파케이 포맷과 원천 데이터에서 동일한 이벤트 수가 S3로 전송되는 것을 확인할 수 있습니다.

 

[Cribl Stream: Monitoring]

 

 

결과 (파케이vs 원천 데이터)

 

Cribl Stream을 통해 파케이와 원천 파일이 각각 35개가 생성되었으며, 평균 파일 크기는 파케이가 3.1KB이고 원천 데이터가 5.5KB입니다. 파케이로 압축된 파일이 저장될 때, 크기가 더 작게 나타난 것을 확인하였습니다.

 

                   [S3: 파케이 포맷 파일 저장 상태]

 

 

                   [S3: 원천 데이터 파일 저장 상태]

 

이벤트의 수나 내용이 축소되어 파일 크기 차이가 발생할 수도 있기 때문에 내용을 확인하였으며, 각 파일마다 동일한 수의 이벤트와 필수 내용이 포함되어 있는 것을 확인하였습니다.

 

      [파케이 뷰어로 파케이 파일의 내용 확인]

 


  [텍스트 에디터로 원천 파일의 내용 확인]

 

 

절대적으로 평가할 수는 없지만 짧은 테스트를 통해 파케이 포맷으로 파일을 압축할 경우 원본 데이터로 파일을 저장할 때보다 파일 크기가 약 43% 정도 감소하는 것을 확인할 수 있었고 이는 객체 스토리지에 저장할 때 용량과 비용 면에서 이점을 제공할 수 있습니다.

 

 

결론


파케이 포맷으로 압축 시 상대적으로 높은 압축률을 가지고 있다는 검증된 자료는 쉽게 확인할 수 있습니다.

그러나 좋은 포맷이라 하더라도 변환 과정이 어렵다면 사용을 지양하게 됩니다. 이에 데이터를 변환하고 처리하는 과정을 간편하게 만들어주는 Cribl Stream을 사용하여 파케이 포맷으로 정확하게 처리되고 전송되는지 검증이 필요했습니다.

 

Cribl Stream은 파케이 포맷 뿐만 아니라 AWS 내에서 스키마 지정이 필요한 VPC 로그, CloudFront 등의 구문 분석을 쉽게 처리할 수 있어 데이터 처리 시 스키마 지정이 필요하거나 구문 분석이 어려운 경우, 또는 업무의 오버 헤드를 줄이기 위해 데이터를 전송하는 과정에서 이를 처리할 수 있는 솔루션을 찾고 계신다면 Cribl Stream을 적극 추천드립니다.

 

 

참고 문헌


– Introduction to Parquet

https://www.dremio.com/resources/guides/intro-apache-parquet/
– Parquet wikitree
https://en.wikipedia.org/wiki/Apache_Parquet
– Use cases & benefits
https://www.upsolver.com/blog/apache-parquet-why-use
– Comparison of file formats
https://butter-shower.tistory.com/245
– Parquet description
https://devidea.tistory.com/92
– Introduction to Cribl
https://cribl.io/
– Parquet Schemas in Cribl Stream
https://docs.cribl.io/stream/parquet-schemas