HiveServer2 클라이언트
HiveServer2 클라이언트 (HiveServer2 Clients)
HiveServer2는 원격 클라이언트가 Thrift로 쿼리를 실행하게 해 주는 서버 서비스예요. 이 페이지는 HiveServer2가 지원하는 다양한 클라이언트를 설명해요. Beeline 셸, JDBC, Thrift 자바 클라이언트 등이 대표적이에요.
출처: https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients
Beeline은 HiveServer2와 함께 동작하는 커맨드 셸이에요. SQLLine CLI 기반의 JDBC 클라이언트라서 SQLLine 문서가 Beeline에도 그대로 적용돼요. Beeline은 임베디드 모드와 원격 모드 둘 다 지원해요. 임베디드 모드는 Hive CLI처럼 내장 Hive를 실행하고, 원격 모드는 분리된 HiveServer2 프로세스에 Thrift로 연결돼요. 프로덕션에는 원격 모드가 권장되는데, 더 안전하고 사용자에게 HDFS/메타스토어 직접 접근 권한이 필요 없기 때문이에요.
Beeline을 켜고 연결하는 예시예요.
% bin/beeline
beeline> !connect jdbc:hive2://localhost:10000 scott tiger
0: jdbc:hive2://localhost:10000> show tables;
명령줄에서도 연결 파라미터를 줄 수 있어요. % beeline -u jdbc:hive2://localhost:10000/default -n scott -w password_file처럼 -u(JDBC URL), -n(사용자), -p(비밀번호), -d(드라이버), -e(쿼리), -f(스크립트 파일), -i(초기화 파일) 옵션을 지원해요. -p의 인자는 Hive 2.2.0부터 선택 사항이라, 비밀번호를 생략하면 연결 시 프롬프트가 떠요. -r은 이전에 !connect 후 !save로 저장한 마지막 URL에 재연결해요.
Beeline의 !<SQLLine command> 중 !quit는 Beeline을 종료하고, !delimiter $$는 쿼리 구분자를 바꿔요(기본 ;). !set fetchsize 200처럼 fetch size를 설정해서 한 번의 데이터베이스 왕복에 가져오는 행 수를 조절할 수도 있어요(fetchsize는 -1이면 기본값, 0 이상이면 드라이버에 전달, 그 외 음수는 예외).
다중 사용자 시나리오에서는 Kerberos 인증과 위임이 중요해요. 커넥션 전에 유효한 Kerberos 티켓이 티켓 캐시에 있어야 하는 일반적인 방식 대신, 보안 프록시 사용자(secure proxy users) 지원을 활용할 수 있어요(Hive 0.13.0+). 두 가지 구성 요소가 있어요. 하나는 특권 사용자가 연결 시 다른 세션 사용자를 직접 지정하는 hive.server2.proxy.user=<user> 방식이고, 다른 하나는 Oozie 같은 워크플로가 위임 토큰을 받아 다른 머신에서 연결하는 방식이에요.
Kerberos를 사전 인증된 Subject로 사용하는 방법도 있어요(Hive 0.13.0+). 이때 hive-exec*.jar를 클래스패스에 추가하고, JDBC URL 속성에 auth=kerberos와 kerberosAuthType=fromSubject를 지정한 뒤 Subject.doAs() 안에서 연결을 열어요. 이 방법으로 미들웨어 시스템이 클라이언트 실행 사용자로 쿼리를 실행할 수 있어요.
더 알아보기
- HiveServer2 설정은 Setting Up HiveServer2와 Configuration Properties에서
- Kerberos 인증·위임 자세한 예시는 ProxyAuthTest.java에서