Kudu 는 HDFS 를 쓰지 않는다. 각 tablet server 의 로컬 디스크에 자체 포맷으로 저장하며, 테이블 하나가 파일 하나에 대응하지도 않는다. 데이터는 태블릿 단위로 나뉘고, 각 태블릿은 블록 단위로 데이터 디렉터리에 흩어진다. 따라서 테이블 이름 = 디렉터리 형태로 찾는 것은 불가능하다.
sudo grep -E 'fs_(wal|data|metadata)_dir' /etc/kudu/conf/tserver.gflagfile
curl -s http://tserver01:8050/varz | grep -E 'fs_data_dirs|fs_wal_dir'
| 플래그 | 용도 |
|---|---|
--fs_wal_dir |
WAL. 지연에 민감하므로 빠른 디스크에 둔다 |
--fs_metadata_dir |
메타데이터 |
--fs_data_dirs |
실제 데이터 블록. 여러 디렉터리 지정 가능 |
kudu table describe master01:7051,master02:7051,master03:7051 impala::mydb.mytable
kudu cluster ksck master01:7051,master02:7051,master03:7051 \
--tables impala::mydb.mytable --ksck_format=plain_full
ksck 출력에 태블릿 ID, 복제본이 있는 tablet server, 상태가 나온다. 마스터 웹 UI(8051)의 테이블 화면과 tablet server 웹 UI(8050)의 Tablets 화면에서도 같은 정보를 본다.
Prometheus 형식 메트릭을 직접 내놓으므로 스크랩하거나 curl 로 바로 본다.
curl -s "http://tserver01:8050/metrics?format=prometheus" | grep on_disk_size | head
curl -s "http://master01:8051/metrics?format=prometheus" | head
태블릿별 디스크 사용량은 on_disk_size 계열 메트릭에서 확인한다. 테이블 단위 합계가 필요하면 태블릿을 테이블로 묶어 집계한다. 클러스터 전체의 대략적인 균형은 리밸런스 보고서로 본다.
kudu cluster rebalance master01:7051,master02:7051,master03:7051 \
--report_only --output_replica_distribution_details
특정 조건의 행을 찾는 일은 파일을 뒤지는 것이 아니라 SQL 로 한다.
SELECT * FROM mydb.mytable WHERE id = 1001;
CLI 에서 직접 스캔할 수도 있다. 운영 중에는 부하를 주므로 조건과 컬럼을 좁힌다.
kudu table scan master01:7051,master02:7051,master03:7051 impala::mydb.mytable \
--columns=id,name \
--predicates='["AND",[">=","id",1000],["<=","id",1010]]'
tablet server 의 데이터 디렉터리를 손으로 건드리면 태블릿이 깨진다. 디스크를 추가하거나 제거할 때는 Kudu 문서의 정식 절차를 따르고, 한 대씩 순차로 처리하며 매번 ksck 로 정상 여부를 확인한다.