컴팩션 풀링
컴팩션 풀링 (Compaction pooling)
컴팩션 요청(compact request)과 워커(worker)를 풀(pool)에 할당할 수 있다는 개념이에요. 특정 풀에 할당된 워커는 그 풀에 속한 컴팩션 요청만 처리합니다. 풀에 할당되지 않은 워커와 컴팩션 요청은 암묵적으로 기본 풀(default pool)에 속합니다.
출처: 문서
본문
풀링 개념을 이용하면 컴팩션 요청 처리를 세밀하게 조정할 수 있어요. 예를 들어 'high priority compaction'이라는 풀을 만들고 자주 수정되는 테이블을 그 풀에 할당한 뒤, 전용 워커 세트를 이 풀에 배정할 수 있습니다. 그 결과, 기본 큐에 더 먼저 들어간 다른 컴팩션 요청이 있더라도 이 테이블들의 컴팩션 요청은 전용 워커가 즉시 처리하게 됩니다.
풀 할당 (Pool assignment)
컴팩션 요청은 세 가지 방식으로 풀에 할당될 수 있어요.
자동 풀 할당 (Automatic pool assignment)
데이터베이스, 테이블, 파티션은 다음 Database/Table 속성을 통해 컴팩션 풀에 할당할 수 있습니다.
hive.compactor.worker.pool={pool_name}
속성이 Database 레벨에 설정되면 그 데이터베이스의 모든 테이블과 파티션에 적용돼요. 풀은 테이블/파티션 레벨에서도 할당할 수 있는데, 이 경우 Database 레벨 값(설정되어 있다면)을 덮어씁니다. 위 중 하나라도 설정되면 Initiator가 컴팩션 요청을 만들 때 그 값을 사용합니다.
수동 풀 할당 (Manual pool assignment)
ALTER TABLE COMPACT 명령을 사용해 컴팩션 요청을 풀에 할당할 수도 있어요 (예: 수동 컴팩션). 지정하면 이 값이 어떤 레벨의 hive.compactor.worker.pool 값보다 우선합니다.
ALTER TABLE COMPACT table_name POOL 'pool_name';
암묵적 풀 할당 (Implicit pool assignment)
풀 이름이 지정되지 않은 테이블, 파티션, 수동 컴팩션 요청은 암묵적으로 기본 풀에 할당됩니다.
풀 타임아웃 (Pool timeout)
컴팩션 요청이 정해진 시간 안에 어떤 라벨된 풀에서도 처리되지 않으면 기본 풀로 폴백(fallback)해요. 타임아웃은 다음 설정 속성으로 정의할 수 있습니다.
hive.compactor.worker.pool.timeout
이 방식이 커버하는 사용 사례는 다음과 같습니다.
- 요청이 실수로 존재하지 않는 풀에 할당된 경우 (예:
ALTER TABLE COMPACT명령의 풀 이름 오타) - 컴팩션 요청을 만드는 데 사용된 DB/테이블 속성의 오타
- 스케일다운이나 스케줄로 HS2 인스턴스가 중지됐는데, 보류 중인 컴팩션 요청을 여전히 처리해야 하는 경우
설정 속성을 0으로 두면 타임아웃을 비활성화할 수 있어요.
라벨된 워커 풀 (Labeled worker pools)
라벨된 워커 풀은 다음 설정으로 정의할 수 있습니다.
hive.compactor.worker.{poolname}.threads={thread_count}
이 경우 설정 키도 동적이라는 점을 유의하세요.
기본 풀 (Default pool)
기본 풀은 라벨되지 않은 요청과 타임아웃된 컴팩션 요청을 처리하는 역할을 해요. 클러스터 전체에서 적어도 한 노드의 워커 스레드 1개는 기본 풀에 할당되어야 합니다. 그렇지 않으면 컴팩션 요청이 처리되지 않을 수 있어요.
워커 할당 (Worker allocation)
기존의 hive.compactor.worker.threads 설정 값은 최대 워커 스레드 수를 의미합니다. 워커 할당은 다음과 같이 이루어져요.
- 라벨된 풀은 임의의 순서로 순차적으로 초기화됩니다.
- 각 풀은 자체 워커 수만큼 사용 가능한 워커를 줄입니다.
- 할당 가능한 워커 수가 설정값보다 적으면 풀 크기가 조정됩니다. (예: 요청한 풀 크기가 5인데 남은 워커가 3개뿐이면 풀 크기가 3으로 줄어듭니다.)
- 할당 가능한 워커 수가 0이면 해당 풀은 초기화되지 않아요.
- 라벨된 풀이 쓰고 남은 모든 워커는 기본 풀에 할당됩니다.
워커 할당은 HS2 인스턴스별로 구성할 수 있어요.
더 알아보기 (Learn more)
컴팩션 풀링은 자주 갱신되는 테이블에 전용 워커를 붙여 컴팩션 지연을 줄이는 강력한 도구예요. 기본 풀에 워커를 하나 이상 남겨두는 것만 잊지 않으면 안정적으로 운영할 수 있습니다.