티스토리 뷰
이번에 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 를 위한 처리시간도 더 짧게 걸렸다.
'데이터처리 > Hive' 카테고리의 다른 글
[hive] KafkaStorageHandler 에서 SASL_PLAINTEXT 인증모듈 사용하기 (0) | 2023.07.24 |
---|---|
[hive] hive 에서 kafka 를 연동하고 집계하는 방법 - KafkaStorageHandler 를 써보자 (0) | 2023.07.21 |
[Hive] kafka 의 json 데이터를 hive 에서 다루는 방법 - KafkaStorageHandler 활용법 (0) | 2023.06.16 |
[Hive] 파일포맷(orc, parquet, avro..) 별 테이블 생성과 압축방법 (0) | 2023.05.22 |
[HIVE] HiveAccessControlException Permission denied 원인 (0) | 2023.02.16 |