HDFS 상에 어떤 형태로 데이터가 저장되거나 존재하는가를 고려하여 데이터구조 최적화할 수 있다.
이때 사용하는 방식으로 Bucketing과 Partitioning이 있다.
Bucketing
- 셔플링을 줄이기 위해서 사용 (컬럼 기준 재분배)
- Aggregation이나 Window 함수, JOIN 에서 많이 사용되는 컬럼이 있는지 확인하고 있다면 DataFrame을 특정 컬럼(들)을 기준으로 나눠서 테이블로 저장
- Bucket의 수와 기준 ID 지정 필요 ⇨ DataFrameWriter의 bucketBy 함수 사용
- 지정된 버킷의 수만큼 HDFS 파티션 생성
File System Partitioning
- 지금까지 배운 내용에서 partition은 데이터프레임을 나눠 저장할 때 단위로 사용되었다면,
- ▶️ 여기서 이야기 하는 File System에 저장되는 데이터를 특정 컬럼(들)을 기준으로 물리적으로 나눠 저장하는 것을 말한다. (컬럼기준 디렉토리 구성)
- 특정 컬럼을 기준으로 데이터 조회 등이 많다고 할 때 이 컬럼을 기준으로 폴더 구조를 만들어 데이터 저장을 최적화한다.
- 이 컬럼을 Partition Key라고 함
- 데이터 생성시간 기반으로 데이터 읽기를 많이 한다면 연도-월-일-시간의 폴더 구조로 저장
- 데이터 읽기 과정을 최적화(스캐닝 과정이 줄어들거나 없어짐)
- Retention Policy 적용시에 날짜별로 구분이 되어있어서 특정 날짜 기준으로 필터링 등 데이터 관리가 쉬워짐
- DataFrameWriter의 partitionBy 사용
- cardinality가 낮은 키를 선택해서 Partition Key로 사용
- Partition Key를 기준으로 파일이 생성
- HIVE에서 사용하는 Partitioning을 말함
'데브코스 데이터엔지니어링' 카테고리의 다른 글
| [프로그래머스] 같은 숫자는 싫어 (스택/큐 Lv1) - Python (0) | 2025.03.13 |
|---|---|
| [Spark] 데이터 파일 포맷 (Text, JSON, PARQUET 등 비교) (0) | 2025.01.02 |
| [Hadoop] 하둡 분산 컴퓨팅 시스템 YARN이란? (0) | 2025.01.02 |
| [Hadoop] HDFS 분산 파일 시스템이란 (0) | 2025.01.02 |
| [Hadoop] 하둡(Hapoop) 이란? (0) | 2025.01.02 |