티스토리 뷰

반응형

이번에 streamsets 를 통해 생성된 스트리밍 데이터를 마이그레이션 할 일 이 있어서 테스트해본 간단한 데이터이다.

참고로 avro 포맷에 스트림으로 처리되다보니 파일갯수는 많은 편이었다.

 

이때, json 텍스트가 많은 A 테이블과, 일반적인 필드값 수준의 B 테이블이 존재해서 몇가지 압축알고리즘별 실험을 해보았다.

참고로, hive 에서 지원하는 avro 압축알고리즘은 snappy, bzip2, deflate 등이 존재한다. (xz 압축은 테스트 실패함)

https://github.com/apache/avro/blob/master/lang/java/avro/src/main/java/org/apache/avro/file/CodecFactory.java#L33-L36 

 

AVRO 압축 하여 저장하는 방법

hive 에서 avro 파일의 압축을 지정하는것은 set 을 통해 환경변수를 지정한다.

아래와 같이 설정을 지정하고 insert 를 하게되면 avro 의 압축이 snappy 로 지정된다.

SET hive.exec.compress.output=true;
SET avro.output.codec=snappy; -- snappy , bzip2, deflate

 

AVRO 압축 알고리즘별 용량비교

테이블 A 는 필드값에 json 문자열 덩어리의 비중이 높아서, 컬럼베이스 파일포맷으로 변환해도 이득이 별로 없는 케이스이다.

그래서 AVRO 에서 ORC 로 줄어들어도 10% 정도밖에 용량이 안줄어든 특이한 케이스 이다.

 

절대적인건 아니지만, 간단하게 요약하면 이런정도의 데이터를 얻을수 있었다.

구분 포맷 압축 용량 원본대비 비고
테이블 A
(필드에 json 많음)
AVRO 무압축 57.8G 100% 원본
AVRO SNAPPY 14.3G 24%  
AVRO bzip2 10.7G 18.5% 속도 느림
AVRO deflate 10.7G 18.5% 속도 느림
ORC 무압축 52.4G 90% ORC 용량 안줄어둠
ORC SNAPPY 11.1G 19.2%  
ORC ZLIB 6.5G 11.2%  
테이블B
(일반적인 수준)
AVRO 무압축 2.3G 100% 원본
AVRO SNAPPY 404.3M 17.6%  
AVRO bzip2 275.7M 11.9% 속도 느림
AVRO deflate 286.6M 12.4% 속도 느림
ORC 무압축 1.0G 43.4% ORC 용량 줄어듬
ORC SNAPPY 289.0M 12.5%  
ORC ZLIB 195.8M 8.5%  

결론

avro 파일포맷에서 압축 알고리즘은 snappy 를 쓰자.  (무압축 대비 1/4 ~ 1/5 로 줄어든다)

avro 에 다른 압축 알고리즘은 bzip2, delate 은 쓰지말자. (느리다)

그럴바에는 ORC+ZLIB 를 사용하자 용량도 더 줄어들고, insert  를 위한 처리시간도 더 짧게 걸렸다.

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함