Impala 에는 저장 형식으로 테이블을 거르는 구문이 없어 Kudu 테이블만 골라 크기·파티션·태블릿 배치를 확인하려면 Kudu CLI, master 웹 UI, Impala SQL 을 조합해야 한다. Windows PC(DBeaver)에서 쓸 수 있는 방법과, range 전용 테이블에서 생기는 노드 간 태블릿 불균형을 리밸런서로 완화하는 절차를 정리한다.
kudu table list <master>:7051 | grep '^impala::' # Impala 로 만든 테이블은 impala::db.table
kudu table statistics <master>:7051 impala::db.tbl # on disk size, live row count (1.14+)
kudu table describe <master>:7051 impala::db.tbl # 컬럼·PK·hash/range 구성·RF
kudu table list <master>:7051 -list_tablets # 태블릿·레플리카 위치
kudu cluster ksck <master>:7051 -tables=impala::db.tbl # 리더 분포·헬스
전체 테이블 통계를 TSV 로 뽑으려면 table list 결과를 루프로 돌려 statistics 의 on disk size / live row count 를 뽑는다. Kudu CLI 는 Windows 바이너리가 없으므로 PC 에서는 Docker(apache/kudu 이미지)나 WSL2 로 실행한다.
SHOW RANGE PARTITIONS db.tbl; -- Kudu 에서 실제 경계를 읽음. SHOW CREATE TABLE 보다 정확
SHOW CREATE TABLE db.tbl; -- hash 정의는 여기서
DESCRIBE FORMATTED db.tbl; -- storage_handler, kudu.table_name, kudu.master_addresses
COMPUTE STATS db.tbl; SHOW TABLE STATS db.tbl;
SHOW CREATE TABLE 은 HMS 메타데이터로 DDL 을 재구성하므로 range 경계가 실제와 어긋날 수 있다. 계속 어긋나면 INVALIDATE METADATA db.tbl 후 다시 본다.SHOW TABLE STATS 는 Kudu 테이블의 디스크 크기를 정확히 보여주지 않는다. 크기는 Kudu 쪽이 정확하다.SHOW 문은 한 문장만 Ctrl+Enter 로 실행하고, 세미콜론에서 파싱 오류가 나면 뺀다. range 파티션이 없는 테이블은 "not a range-partitioned table" 오류가 정상이다.TABLE_PARAMS 에서 storage_handler LIKE '%KuduStorageHandler%' 로 한 번에 목록이 나온다.http://<master>:8051/tables # 테이블·스키마·태블릿
http://<master>:8051/tservers # tserver 목록 (href 로 각 tserver 웹 UI 주소)
http://<tserver>:8050/metrics?metrics=on_disk_size # tserver 별 태블릿 on_disk_size JSON
Python urllib 로 이 두 단계를 긁어 테이블별 크기를 합산할 수 있다. 회사 PC 에서 errno 11001 getaddrinfo failed 가 나면 (1) 주소에 http:// 를 겹쳐 넣었거나, (2) tserver 호스트명이 클러스터 내부에서만 풀리거나(hosts 등록 또는 IP 직접 지정), (3) 시스템 프록시가 잡혀 있는 것이다. 프록시는 os.environ["NO_PROXY"] = "*" 또는 set NO_PROXY=* 로 우회한다.
hash 없이 range 만 있는 테이블은 range 파티션 1개 = 태블릿 1개라, 파티션별 데이터량이 다르면 레플리카 개수는 균형이어도 바이트는 특정 노드에 쏠린다. 이는 버그가 아니라 구조적 특성이다. 근본 해결은 hash × range 2단 파티셔닝으로 재생성하는 것이고, 운영 완화는 리밸런서다.
kudu cluster ksck m1:7051,m2:7051,m3:7051 | tail -20 # 건강 확인 (복구 중 태블릿 없어야 함)
kudu table list m1:7051,m2:7051,m3:7051 | grep -i demand_mp_mx # 정확한 테이블명
kudu cluster rebalance m1:7051,m2:7051,m3:7051 \
--tables=impala::master.demand_mp_mx --report_only # 이동 계획 미리보기
kudu cluster rebalance m1:7051,m2:7051,m3:7051 \
--tables=impala::master.demand_mp_mx --max_moves_per_server=3
--max_moves_per_server 로 IO 부담을 제한한다.kudu tablet change_config move_replica 를 쓸 수 있으나 임시방편이다.