-
데이터 엔지니어링에서 최종 파일 용량 줄이는 tip개발지식 아카이브/Data - Hadoop 2025. 9. 8. 14:12

컬럼 정렬 수행
1) “정렬”이 왜 도움이 되나? (컬럼 기준 정렬)
- Parquet는 컬럼 단위 인코딩 + 페이지/딕셔너리 인코딩 + 압축을 사용해.
- 값이 뭉쳐 있을수록(= 같은 값이 길게 반복되거나 가까이 모여 있을수록)
- RLE(런-렝스), 딕셔너리 인코딩 적중률 ↑ → 압축률이 올라가고 파일 크기 ↓.
- 따라서, 쿼리 필터/파티션 키/중복도가 높은 컬럼을 우선 정렬하면 효과가 좋다.
- 그리고 길이가 긴 string 데이터일 수록 효과가 좋았다. 압축량이 커지기 때문이다.
- 주의: 전체 셔플이 필요하므로 쓰기 비용↑. 하지만 장기적으로는 읽기 성능 + 용량 절감의 이득을 볼 수 있었다.
3) 파티셔닝과 파일 개수
- 의미 있는 정렬키로 프루닝 + 정렬 효과를 극대화.
- 데이터 양이 적은 경우 order by, 많은 경우 sort by로 정렬하였음. sort by를 사용시 파티션 수 최종 파일 크기가 가능한 크게 나오도록 coalesce 힌트로 파티션 수를 가능한 작게 사용하도록 했음 (1개 파티션은 못 쓰더라도... 파티션 수를 줄일수록 압축률이 높아지니깐..)
*** 정렬 방식 참고 ***
- ORDER BY
- 전체 데이터를 글로벌 정렬한다.
- 내부적으로 모든 데이터가 전역 정렬됨. (셔플이 일어나게됨. 리듀서들이 범위별로 나눠서 데이터를 가져가서 정렬함)
- 결과: 정렬은 정확하지만 데이터 양이 많으면 병목 + OOM 위험이 큼.
- SORT BY
- 지정한 컬럼 기준으로 각 파티션 내부에서만 로컬 정렬한다.
- 파티션 개수는 유지되고, 각 파티션별로만 순서가 정렬됨.
- 결과: 병렬성 유지 → 대용량 데이터 처리에 유리하지만, 전체적으로는 글로벌 순서 보장은 안 됨.
파티셔닝 힌트 전략
- 쿼리에 repartition 힌트를 주면 다시 데이터가 흩어져 버리는 이슈가 생긴다. coalesce 힌트로 변경하여, 정렬된 데이터가 흩어지지 않게 해야 한다
'개발지식 아카이브 > Data - Hadoop' 카테고리의 다른 글
[Hive] insert overwrite 중에 데이터가 없어도 파티션이 생겼으면 할 때 (0) 2025.08.22 [빅데이터 전문가의 하둡관리] 하둡 로깅 이해하기 (0) 2025.02.24 [빅데이터 전문가의 하둡관리] 하둡 클러스터의 리소스 할당 (0) 2025.02.19 [빅데이터 전문가의 하둡관리] 네임노드 오퍼레이션, 고가용성 그리고 페더레이션 (0) 2025.02.10 [빅데이터 전문가의 하둡관리] HDFS 명령, 퍼미션, 스토리지 (0) 2025.02.04