Apache Kyuubi 는 여러 실행 엔진 앞에 놓이는 다중 사용자 SQL 게이트웨이다. 클라이언트는 HiveServer2 호환 JDBC/ODBC 로 Kyuubi 한 곳에만 붙고, Kyuubi 가 뒤쪽 엔진에 연결을 맺어 쿼리를 넘긴다.
Impala 는 Kyuubi 의 네이티브 실행 엔진이 아니다. Spark · Flink · Hive · Trino 처럼 Kyuubi 가 프로세스를 띄워 관리하는 대상이 아니라, JDBC 엔진을 통해 이미 떠 있는 Impala 에 연결하는 형태로만 지원된다. 즉 Impala 서버는 별도로 운영해야 한다.
BI 도구 / 애플리케이션
│ JDBC (HiveServer2 프로토콜)
▼
Kyuubi Server
│ JDBC 엔진 + Impala dialect
▼
Impala Coordinator
쿼리 실행 자체는 완전히 같다. 실행 계획을 세우고 자원을 쓰는 주체가 Impala 이므로 결과와 성능은 직접 접속과 동일하다. 달라지는 것은 그 앞단이다.
| 항목 | Impala JDBC 직접 | Kyuubi 경유 |
|---|---|---|
| 실행 주체 | Impala | Impala |
| SQL 방언 | Impala | Impala |
| 접속 지점 | Impala coordinator 또는 로드밸런서 | Kyuubi 단일 엔드포인트 |
| 세션·연결 관리 | 클라이언트 책임 | Kyuubi |
| 여러 엔진 통합 | 불가 | 가능 (같은 URL 로 Spark·Impala 등) |
| 감사 로그 | 엔진별로 분산 | Kyuubi 에서 중앙 수집 가능 |
| 추가 홉 | 없음 | 하나 늘어남 |
Kyuubi 를 두는 이유는 성능이 아니라 운영이다. 접속 지점을 하나로 고정해 두면 엔진을 교체하거나 추가해도 클라이언트를 고치지 않아도 된다. 반대로 장애 지점이 하나 늘고, Impala 고유 기능(쿼리 프로파일 확인, 세션 옵션 전달 등)이 게이트웨이를 넘어가는 과정에서 제약을 받을 수 있다.
JDBC 엔진을 쓰도록 지정하고 Impala 드라이버와 접속 정보를 준다.
kyuubi.engine.type=JDBC
kyuubi.engine.jdbc.type=impala
kyuubi.engine.jdbc.driver.class=com.cloudera.impala.jdbc.Driver
kyuubi.engine.jdbc.connection.url=jdbc:impala://impalad-host:21050/default
kyuubi.engine.jdbc.connection.user=<user>
Impala JDBC 드라이버 jar 은 Kyuubi 의 엔진 클래스패스에 넣어야 한다. 정확한 프로퍼티 이름과 배치 경로는 사용하는 Kyuubi 버전 문서를 확인한다. (확인 필요)
Impala 하나만 쓰고 있고 클라이언트도 몇 개 되지 않으면 Kyuubi 를 넣을 이유가 적다. Impala 자체의 로드밸런서 구성으로 접속 지점 단일화는 이미 해결된다.
Spark 와 Impala 를 함께 쓰고, 사용자마다 엔진을 골라 쓰게 하고 싶으며, 접속과 감사를 한곳에서 통제하려는 상황이면 Kyuubi 가 맞는 도구다.