Impala 는 HiveServer2 프로토콜을 쓰므로 Cloudera 가 제공하는 Impala JDBC 드라이버를 쓰거나, Hive JDBC 드라이버로도 접속할 수 있다. DBeaver 같은 클라이언트에 드라이버를 등록하고 접속 문자열을 맞춘다.
서버 쪽에서는 LDAP 인증이 켜져 있어야 한다. impalad 기동 플래그로 --enable_ldap_auth, --ldap_uri, --ldap_bind_pattern 등이 설정돼 있는지 관리자에게 확인한다.
바이너리 전송 방식이면 21050 포트를 쓴다.
jdbc:impala://impalad01:21050/default;AuthMech=3;UID=myuser;PWD=${PASSWORD}
| 항목 | 뜻 |
|---|---|
AuthMech=0 |
인증 없음 |
AuthMech=1 |
Kerberos |
AuthMech=2 |
사용자명만 |
AuthMech=3 |
사용자명과 비밀번호. LDAP 이 여기에 해당 |
SSL=1 |
TLS 사용 |
TLS 를 함께 쓰는 환경이 일반적이다. 비밀번호를 평문으로 주고받지 않으려면 반드시 켠다.
jdbc:impala://impalad01:21050/default;AuthMech=3;SSL=1;UID=myuser;PWD=${PASSWORD};SSLTrustStore=/path/truststore.jks;SSLTrustStorePwd=${TRUSTSTORE_PASSWORD}
Knox 같은 게이트웨이를 통해 HTTP 전송으로 붙는 구성이면 포트와 전송 모드가 달라진다.
jdbc:impala://gateway:443/default;AuthMech=3;SSL=1;transportMode=http;httpPath=gateway/cdp-proxy-api/impala
드라이버 관리자에서 새 드라이버를 만들고 Cloudera Impala JDBC 드라이버 JAR 을 추가한다. 드라이버 클래스는 배포본에 따라 com.cloudera.impala.jdbc.Driver 또는 com.cloudera.impala.jdbc41.Driver 다. JAR 안의 META-INF/services 를 확인해 정확한 이름을 쓴다.
unzip -p ImpalaJDBC42.jar META-INF/services/java.sql.Driver
URL 템플릿에는 위 접속 문자열 형태를 넣고, 연결 설정에서 사용자와 비밀번호를 지정한다.
JDBC 문제인지 서버 문제인지 가르려면 셸로 먼저 붙어 본다.
impala-shell -i impalad01:21050 -l -u myuser --auth_creds_ok_in_clear -q "SHOW DATABASES;"
impala-shell -i impalad01:21050 -l -u myuser --ssl -q "SHOW DATABASES;"
-l 이 LDAP 인증을 뜻한다. --auth_creds_ok_in_clear 는 TLS 없이 비밀번호를 보내는 것을 허용하는 옵션이며, 시험 목적 외에는 쓰지 않는다.
LDAP 인증은 사용자를 식별할 뿐 권한을 주지 않는다. 테이블 접근 권한은 Ranger 정책으로 따로 관리된다. 접속은 되는데 테이블이 보이지 않으면 인증이 아니라 인가 문제다.
비밀번호를 접속 문자열에 그대로 넣어 공유 문서나 스크립트에 남기지 않는다. 클라이언트의 자격증명 저장소나 환경 변수를 쓴다.