Apache Kudu 는 행 단위의 낮은 지연 접근과 열 지향 분석 스캔을 한 저장소에서 동시에 지원하는 분산 스토리지다. HDFS 는 append 만 되고 HBase 는 스캔이 느린 사이의 빈자리를 메운다 — 기본키가 있는 테이블에 INSERT · UPDATE · DELETE · UPSERT 가 되면서, Impala 로 질의하면 열 지향 스캔이 돈다. 실시간으로 들어오는 데이터를 바로 질의해야 하는 구간에 쓴다.
- 테이블은 강타입 컬럼과 기본키를 갖는다. 기본키는 나중에 바꿀 수 없다.
- 테이블은 태블릿(tablet) 으로 쪼개져 여러 노드에 흩어진다. 각 태블릿은 Raft 로 복제된다(보통 3중). 쓰기는 두 노드 이상에 기록된 뒤 응답한다.
- 파티션은 해시 · 레인지 또는 둘의 조합으로 정한다. 해시는 쓰기 부하를 고르게 흩고, 레인지는 시간 축으로 잘라 오래된 구간을 통째로 떼어내기 좋다.
- Cloudera CDP 에 포함돼 있다. 배포판 설정은 Cloudera 를 볼 것.
| 계열 |
상태 |
비고 |
| 1.18 |
현행. 최신 1.18.1 |
2026-01-09 |
| 1.17 |
유지보수. 최신 1.17.1 |
range 파티션별 커스텀 해시 스키마가 들어온 계열 |
| 구성 요소 |
역할 |
| Master |
테이블 · 태블릿 메타데이터를 관리하고 태블릿 위치를 알려 준다. HA 는 3대(Raft) |
| Tablet Server |
태블릿을 담고 읽기 · 쓰기를 처리한다. 데이터 디렉터리와 WAL 디렉터리를 나눠 두는 것이 좋다 |
| ksck |
클러스터 일관성 · 복제 상태 점검 도구 (kudu cluster ksck) |
- 클럭이 어긋나면 tablet server 가 뜨지 않는다. chrony 설정과 확인 절차.
- 태블릿 · 복제본 · Raft 의 관계와 조정 가능한 플래그.
- tablet server 메모리를 나누는 플래그와 조정 신호.
- 용량 산정 문서의 hot replica 가 무엇을 가리키는지와 메모리 계산.
- WAL 디렉터리는 하나뿐이다. 용량 산정과 GC 가 늦는 이유.
- 어느 디스크를 쓰는지, 테이블별로 얼마를 쓰는지 확인한다.
- 테이블 이름으로 디렉터리를 찾을 수 없는 이유와 태블릿 단위 확인법.
- 랙 단위 장애 격리를 위한 위치 매핑 명령과 해제 절차.
--superuser_acl 과 Impala 로 테이블을 만들 때의 권한.
- 테이블 생성 DDL 의 기본 형태와 이름 규칙.
- 해시 버킷 수와 레인지 경계를 정하는 기준. 카디널리티 문제.
- 레인지 구간마다 해시 버킷 수를 다르게 줄 때.
- 파티션을 바꿔 다시 만들 때 쓰는 DDL 생성.
- 64KiB 셀 한도를 전제로 컬럼 타입과 인코딩 · 압축 속성을 정한다.
AUTO_INCREMENT 가 없으므로 키 생성 책임을 적재 경로로 옮긴다.
- Impala 로 컬럼 이름을 바꿀 때 생기는 일.
- Kudu 에는 DDL 콘솔이 없다. Impala SQL 로 기본키 · 파티션을 정해 만든다.
- CTAS 로 복제할 때 기본키 · 파티션을 명시해야 하는 이유.
- 세션 버퍼가 넘칠 때 조정할 값과 쓸 수 있는 힌트.
UNIXTIME_MICROS 는 UTC 기준이다. 적재 전에 변환을 끝낸다.
- HMS 이름과 Kudu 이름이 따로 있다. 이름을 바꾸거나 비울 때의 순서.
- storage handler 로 Hive 를 붙이는 구성과 Impala 대비 한계.
kudu cluster rebalance 옵션과 복제본이 모자랄 때.
- 내리기 전에 리더십과 스캔을 다른 서버로 빼는 드레인 조작.
- 재기동만으로 대량 tablet copy 가 도는 것을 maintenance mode 로 막는다.
VACUUM 이 없는 대신 델타 컴팩션이 공간을 돌려주는 구조.
- 오래된 구간을 Hive · Parquet 로 내리는 설계와 판단 기준.
- 커밋도 스냅샷도 없다는 전제 위에서 세우는 백업 전략.
- DDL 을 옮기고 Impala · Spark 또는
kudu-backup 으로 데이터를 넘긴다.
- 클러스터 간 실시간 복제는 없다. DR 을 짜는 현실적인 방법.
- HMS 에는 없는데 Kudu 에 남은 테이블을 CLI 로 지운다.
- STRING 컬럼이 64KiB 를 넘겨 행이 거부될 때의 대응.
- 오류 문구로 막힌 구간을 가른다. 마스터 · tserver 포트를 모두 열어야 한다.
- 스캐너를 열지 못하고 3분쯤에 실패하는 쿼리의 원인.
- UUID 가 어긋나 태블릿을 찾지 못할 때의 복구.
soft memory limit exceeded 로 쓰기가 거부될 때 볼 지표와 한도.
- Impala 등에서 Kudu 테이블을 조회할 때 스캐너를 열지 못하고 타임아웃까지 재시도만 반복한다.
- Impala 를 거치지 않고 Kudu Java 클라이언트로 직접 테이블을 만들 때 부딪히는 것들이다. 의존성 · 인증 주체 · HMS 연동이라…
- Kudu 의
--logfile_mode 기본값이 436 인데 이 숫자가 무슨 권한인지 알기 어렵다. 게다가 실제로 생긴 로그 파일을 보…
- Impala · Spark · NiFi 에서 Kudu 에 붙을 때 필요한 값은 마스터의
호스트:포트 목록이다. 기본 RPC 포트는 7051…
- Kudu 의 마스터와 tablet server 는 각자 내장 웹 서버로 메트릭을 낸다. 기본 포트는 마스터 8051, tablet server…
- Cloudera Manager 에서 Kudu 서비스의 Ranger 연동을 켜자 마스터가 기동하지 못하고 반복 재시작한다. `stdout.log…
kudu table copy 로 테이블을 옮기는 중 일정량을 넣다가 실패한다.
- tablet server 가 3대인데 테이블 생성이 이 메시지로 실패한다.