하둡 (BUCKET)

HanJu Han·2024년 12월 21일
0

BUCKET 최적화는 특히 다음과 같은 경우에 효과적:

  • 대용량 데이터 조인
  • 데이터 분포가 불균일한 경우
  • 반복적인 집계 연산
  • 복잡한 분석 쿼리 수행

1. 동일한 버킷팅 키로 생성된 테이블 간 조인 최적화

예시 상황: 사용자(users)와 주문(orders) 데이터를 조인

-- 사용자 테이블 (4개 버킷)
CREATE TABLE users (
    user_id INT,
    name STRING,
    city STRING
)
CLUSTERED BY (user_id) INTO 4 BUCKETS;

-- 주문 테이블 (4개 버킷)
CREATE TABLE orders (
    order_id INT,
    user_id INT,
    amount DECIMAL
)
CLUSTERED BY (user_id) INTO 4 BUCKETS;

데이터 예시:

[users 테이블]
버킷 0: user_id = 4, 8, 12 (hash % 4 = 0)
버킷 1: user_id = 1, 5, 9  (hash % 4 = 1)
버킷 2: user_id = 2, 6, 10 (hash % 4 = 2)
버킷 3: user_id = 3, 7, 11 (hash % 4 = 3)

[orders 테이블]
버킷 0: user_id = 4, 8, 12 
버킷 1: user_id = 1, 5, 9
버킷 2: user_id = 2, 6, 10
버킷 3: user_id = 3, 7, 11

최적화 효과:

  • 동일한 버킷끼리만 조인하면 됨 (버킷 0과 버킷 0, 버킷 1과 버킷 1...)
  • 데이터 셔플링 감소
  • 네트워크 트래픽 감소

2. 데이터 스큐(편향) 방지

예시 상황: 특정 지역의 주문 데이터가 매우 많은 경우

CREATE TABLE region_orders (
    order_id INT,
    region_id INT,
    amount DECIMAL
)
CLUSTERED BY (region_id) INTO 8 BUCKETS;

데이터 분포 예시:

[스큐가 있는 경우 - 버킷팅 없을 때]
서울 지역: 1,000,000 건
부산 지역: 100,000 건
대구 지역: 50,000 건
기타 지역: 각 10,000 건

[버킷팅 적용 후]
버킷 0: 서울(125,000), 부산(12,500), 대구(6,250)...
버킷 1: 서울(125,000), 부산(12,500), 대구(6,250)...
...
버킷 7: 서울(125,000), 부산(12,500), 대구(6,250)...

3. 맵리듀스 작업의 셔플링 단계 최적화

예시 상황: 고객별 총 구매금액 계산

CREATE TABLE customer_transactions (
    transaction_id INT,
    customer_id INT,
    amount DECIMAL,
    transaction_date DATE
)
CLUSTERED BY (customer_id) INTO 16 BUCKETS;

맵리듀스 과정 비교:

[버킷팅 없는 경우]
Map 단계:
- 모든 데이터를 customer_id로 그룹화
- 전체 데이터를 셔플링해야 함

Reduce 단계:
- 모든 노드에서 셔플링된 데이터 집계

[버킷팅 있는 경우]
Map 단계:
- 이미 customer_id로 버킷팅되어 있음
- 각 버킷 내에서만 처리

Reduce 단계:
- 버킷별로 독립적으로 집계 가능
- 셔플링 데이터량 대폭 감소

실제 쿼리 예시:

-- 고객별 총 구매금액 계산
SELECT 
    customer_id,
    SUM(amount) as total_amount
FROM customer_transactions
GROUP BY customer_id;

처리 성능 비교:

[버킷팅 없는 경우]
- 데이터 셔플링: 100GB
- 처리 시간: 30분

[버킷팅 있는 경우]
- 데이터 셔플링: 10GB (90% 감소)
- 처리 시간: 5분

버킷팅을 효과적으로 사용하려면 다음 사항을 고려:

  • 적절한 버킷 수 선정
  • 조인이 자주 발생하는 키 선정
  • 데이터 분포 특성 파악
  • 쿼리 패턴 분석
profile
시리즈를 기반으로 작성하였습니다.

0개의 댓글