Block Count
snappy, gzip 등 compress/decompress 라이브러리들이기 때문에 어느 데이터 파일 포맷에 사용하는지, 그리고 데이터(테이블) 특성에 따라
성능은 달라질 수 있습니다.
gzip
Deflate알고리즘을 사용하며, Snappy 보다 더 많은 CPU리소스를 사용하지만 더 높은 압축을 할 수 있습니다. 그러나 압축률이 snappy보다 약 2배 높기 때문에 자주 사용하지 않는 콜드 데이터(잘 사용하지 않는 백업용 데이터)에 적합합니다. 실제로 HIVE 통해서 MapReduce의 결과로 cpu extenseive time을 확인했을 때 snappy보다 더 높은 시간이 나왔습니다.
snappy
구글에서 자체 개발한 압축 라이브러리로, 압축률을 적당한 수준으로 제공하면서 빠르게 압축하고 해제하는 것이 특징입나다.
1. snappy, gzip 성능 테스트
https://wikidocs.net/131503
https://www.adaltas.com/en/2021/03/22/performance-comparison-of-file-formats/
(compression_codec 옵션 통해서 테스트지만 table 생성 시 tblproperties에 옵션 넣는 것과 같은 기능 입니다.)
https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/impala_parquet.html#parquet_compression
2. snappy가 구글에서 만든건데 만들 때 다른 포맷들과의 tradeoff대해 쓴 것입니다.
https://www.gitdetail.com/repositories/google/snappy/533862
3. 구글에서 snappy 소개, 성능 관련 공식 문서입니다.
https://github.com/google/snappy
4. snappy, gzip 차이(file splittable 유무)
https://stackoverflow.com/questions/35789412/spark-sql-difference-between-gzip-vs-snappy-vs-lzo-compression-formats
http://boristyukin.com/is-snappy-compressed-parquet-file-splittable/
For MapReduce, if you need your compressed data to be splittable, BZip2 and LZO formats can be split. Snappy and GZip blocks are not splittable, but files with Snappy blocks inside a container file format such as SequenceFile or Avro can be split. Snappy is intended to be used with a container format, like SequenceFiles or Avro data files, rather than being used directly on plain text, for example, since the latter is not splittable and cannot be processed in parallel using MapReduce. Splittability is not relevant to HBase data.
Small files & Too many file
small files은 metadata에 대한 부담, MapReduce에서 기본적으로 file 개수 많큼 task개수가 생성되서 많은 map task를 생성하여 resource에 부담일 수 있습니다. 이를 해결하기 위해서는 partitioning을 더 general하게, set num_nodes=1(기본적으로 여러 node에서 데이터파이을 분산되게 쓰지만 해당 옵션으로 하면 하나의 node혹은 최소한 적은 node에서 file씁니다.), hive.merge 옵션통해서 특정 사이즈 이하 파일들을 merge 시킬 수 있습니다. 해당 작업 진행 시 insert overwrite 시켜야합니다.
1. avoiding small files 에 관한 문서입니다.
1) https://docs.cloudera.com/best-practices/latest/impala-performance/topics/bp-impala-avoiding-small-files.html
set hive.merge.mapfiles 등 x이하 파일 합치고, 최대 x사이즈 파일 만든다 세부 조정 가능한 옵션들입니다.
2. https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/impala_parquet.html#parquet_compacting
SET NUM_NODES=1 옵션을 통해 데이터 노드당 하나 이상 datafile 만들어서 파일 write 시 분산작업을 최소화 시키는 옵션입니다.
'빅데이터 > Hadoop' 카테고리의 다른 글
[Hadoop] corrupt/missing block (0) | 2023.03.19 |
---|---|
MapReduce 원리 (0) | 2022.09.22 |
Hadoop HA 아키텍처 (1) | 2022.09.21 |
Yarn 동작 원리 & Scheduler (0) | 2022.09.21 |
하둡 아키텍처 참고 글 (0) | 2022.09.09 |