Hive ODBC 설정 가이드
Windows PC나 서버에서 HiveServer2에 ODBC로 붙기 위한 준비 과정입니다. 이 설정을 마치면 C# Hive ODBC 예제를 바로 실행할 수 있습니다. 내용은 Cloudera ODBC Driver for Apache Hive 2.7 공식 설치 안내서를 기준으로 정리했습니다.
1먼저 서버 설정 확인
드라이버 설정값은 Hive 서버가 어떻게 설정됐는지에 따라 정해집니다. Hive 서버의 hive-site.xml에서 아래 세 값을 먼저 확인하세요.
직접 볼 수 없다면 Hadoop 관리자에게 이 세 값을 물어보면 됩니다.
- hive.server2.authentication
- 인증 방식 (NONE, LDAP, KERBEROS, NOSASL, SAML)
- hive.server2.transport.mode
- 전송 방식 (binary 또는 http)
- hive.server2.use.SSL
- SSL 사용 여부 (true면 연결에서도 SSL을 켜야 함)
확인한 값을 아래 표에 맞춰 드라이버 설정으로 옮기면 됩니다.
| hive.server2.authentication | 인증 방식 (AuthMech) | 전송 방식 (ThriftTransport) |
|---|---|---|
| NONE | User Name (2) | binary → SASL (1) · http → HTTP (2) |
| LDAP | User Name And Password (3) | binary → SASL (1) · http → HTTP (2) |
| KERBEROS | Kerberos (1) | binary → SASL (1) · http → HTTP (2) |
| NOSASL | No Authentication (0) | Binary (0)만 가능 |
| SAML | SAML 2.0 (12) | HTTP (2)만 가능 |
대부분의 HiveServer2 기본 설정은 User Name 인증입니다. 회사 클러스터는 보통 LDAP(AuthMech=3)이나 Kerberos(AuthMech=1)를 씁니다.
포트는 binary 모드 기본값이 10000입니다. http 모드는 클러스터마다 다르니 관리자에게 확인하세요.
2드라이버 설치
설치 전 확인
- 지원 OS: Windows 10, 8.1 / Windows Server 2019, 2016, 2012
- 관리자 권한, 디스크 여유 공간 100MB
- Visual C++ 재배포 패키지 2015를 드라이버와 같은 비트 수로 설치
- 지원하는 Hive 버전: Apache Hive 1.0 ~ 3.1.3, CDH 6.0 ~ 6.3, CDP 7.0 · 7.1
비트 수 고르기
64비트 Windows에서는 32비트와 64비트 프로그램이 모두 돌지만, 프로그램과 드라이버의 비트 수가 같아야 합니다. 두 버전을 한 PC에 같이 설치해도 됩니다.
| 연결하는 프로그램 | 설치 파일 | ODBC 관리자 위치 |
|---|---|---|
64비트 (C# x64 빌드 등) | ClouderaHiveODBC64.msi | C:\Windows\System32\odbcad32.exe |
32비트 (C# x86, "32비트 선호" 등) | ClouderaHiveODBC32.msi | C:\Windows\SysWOW64\odbcad32.exe |
파일 이름과 반대로 System32에 있는 것이 64비트용, SysWOW64에 있는 것이 32비트용 ODBC 관리자입니다.
시작 메뉴에서는 "ODBC 데이터 원본(64비트)"처럼 비트 수가 붙어 나옵니다.
설치 순서
- 비트 수에 맞는 msi 파일을 더블클릭해 실행합니다.
- Next → 사용권 계약 동의 → 설치 위치 확인 → Install → Finish를 누릅니다.
- 설치가 끝나면 PowerShell에서 드라이버가 등록됐는지 확인합니다. 여기에 나온 이름 그대로 연결 문자열의
Driver={...}에 써야 합니다.
Get-OdbcDriver -Name "*Hive*" | Select-Object Name, Platform
3DSN 만들기
DSN(데이터 원본 이름)은 접속 정보를 Windows에 저장해 두는 것입니다. DSN을 만들어 두면 코드에서는 DSN=HiveProd;UID=...;PWD=...;만 쓰면 됩니다.
DSN 없이 연결 문자열에 모든 값을 직접 써도 되고, 둘 다 쓰면 연결 문자열 값이 DSN보다 우선합니다.
- 시작 메뉴에서 ODBC 데이터 원본을 엽니다. 프로그램과 같은 비트 수의 관리자를 골라야 합니다.
- 드라이버 탭에 Cloudera ODBC Driver for Apache Hive가 있는지 확인합니다.
- 시스템 DSN 탭 → 추가를 누릅니다. 작업 스케줄러나 서비스처럼 다른 계정으로 도는 프로그램은 사용자 DSN을 못 찾으므로 시스템 DSN을 권장합니다.
- Cloudera ODBC Driver for Apache Hive를 고르고 마침을 누릅니다.
- 설정 창에서 아래 값을 채웁니다.
- Data Source Name
- 코드에서 부를 이름 (예:
HiveProd) - Hive Server Type
- Hive Server 2
- Service Discovery Mode
- No Service Discovery (ZooKeeper를 쓰면 ZooKeeper)
- Host(s) / Port
- HiveServer2 호스트와 포트 (예:
hive-server01/10000) - Database
- 쿼리에 스키마를 안 쓸 때 기본으로 쓸 스키마 (예:
default) - Mechanism
- 1단계 표에서 고른 인증 방식
- Thrift Transport
- 1단계 표에서 고른 전송 방식
- 필요하면 SSL Options, Advanced Options, Logging Options를 설정합니다.
- Test를 눌러 연결을 확인하고 OK로 저장합니다.
여러 서버에 같은 DSN을 만들 때 편합니다. 관리자 권한 PowerShell에서 실행하세요. -DriverName은 2단계에서 확인한 이름과 같아야 합니다.
Add-OdbcDsn -Name "HiveProd" `
-DriverName "Cloudera ODBC Driver for Apache Hive" `
-DsnType "System" -Platform "64-bit" `
-SetPropertyValue @(
"Host=hive-server01",
"Port=10000",
"Schema=default",
"HiveServerType=2",
"AuthMech=3",
"ThriftTransport=1"
)
# 확인
Get-OdbcDsn -Name "HiveProd" -DsnType "System" -Platform "64-bit"
비밀번호는 DSN에 넣지 말고 코드나 설정 파일에서 UID·PWD로 넘기는 것을 권장합니다.
4인증 방식별 연결 문자열
DSN 없이 연결 문자열만으로 붙는 예시입니다. Driver={...} 안의 이름은 2단계에서 확인한 이름으로 바꿔 쓰세요.
회사 클러스터에서 가장 흔한 방식입니다. hive.server2.authentication=LDAP일 때 씁니다.
Driver={Cloudera ODBC Driver for Apache Hive};Host=hive-server01;Port=10000;Schema=default;HiveServerType=2;AuthMech=3;ThriftTransport=1;UID=etl_user;PWD=********;
hive.server2.authentication=KERBEROS일 때 씁니다. Kerberos는 Binary 전송을 지원하지 않으므로 SASL(1)이나 HTTP(2)를 써야 합니다.
Driver={Cloudera ODBC Driver for Apache Hive};Host=hive-server01.example.com;Port=10000;HiveServerType=2;AuthMech=1;ThriftTransport=1;KrbRealm=EXAMPLE.COM;KrbHostFQDN=hive-server01.example.com;KrbServiceName=hive;
- KrbRealm
- Hive 서버의 Kerberos 렐름. 기본 렐름과 같으면 비워 둬도 됩니다.
- KrbHostFQDN
- Hive 서버의 전체 도메인 이름.
_HOST로 두면 Host 값을 그대로 씁니다. - KrbServiceName
- Hive 서비스 주체 이름. 보통
hive입니다. - UseOnlySSPI
1이면 MIT Kerberos 대신 Windows 기본 인증(SSPI)을 씁니다. 도메인(AD) 계정으로 로그인한 서버에서 편합니다. 기본값0은 MIT Kerberos를 먼저 씁니다.
hive.server2.authentication=NONE일 때 씁니다. 비밀번호 확인 없이 사용자 이름만 넘깁니다. 이 방식에서는 SSL을 쓸 수 없습니다.
Driver={Cloudera ODBC Driver for Apache Hive};Host=hive-server01;Port=10000;HiveServerType=2;AuthMech=2;ThriftTransport=1;UID=etl_user;
hive.server2.use.SSL=true면 어떤 인증 방식이든 SSL=1을 더합니다(사용자 이름만 쓰는 방식 제외).
Driver={Cloudera ODBC Driver for Apache Hive};Host=hive-server01;Port=10000;HiveServerType=2;AuthMech=3;ThriftTransport=1;SSL=1;UseSystemTrustStore=1;UID=etl_user;PWD=********;
- UseSystemTrustStore
1이면 Windows 인증서 저장소로 서버 인증서를 확인합니다. 회사 CA 인증서가 Windows에 설치돼 있을 때 편합니다.- TrustedCerts
- .pem 파일로 확인할 때 경로를 지정합니다. 이때는
UseSystemTrustStore=0이어야 합니다. - AllowSelfSignedServerCert
1이면 자체 서명 인증서도 허용합니다. 테스트 환경에서만 쓰세요.- CAIssuedCertNamesMismatch
1이면 인증서 이름과 호스트 이름이 달라도 허용합니다.
HiveServer2가 여러 대이고 ZooKeeper로 찾는 구성이면 Host에 ZooKeeper 서버 목록을 넣습니다.
Driver={Cloudera ODBC Driver for Apache Hive};ServiceDiscoveryMode=1;Host=zk01:2181,zk02:2181,zk03:2181;ZKNamespace=hiveserver2;AuthMech=3;UID=etl_user;PWD=********;
ZKNamespace는 클러스터의 hive.server2.zookeeper.namespace 값입니다.
자주 쓰는 연결 문자열 키
| 키 | 뜻 | 값 (기본값) |
|---|---|---|
Host / Port | HiveServer2 주소와 포트 | 포트는 보통 10000 |
Schema | 기본 데이터베이스 | (default) |
HiveServerType | Hive 서버 종류 | 1, 2 (2) |
AuthMech | 인증 방식 | 0 없음 · 1 Kerberos · 2 사용자 이름 · 3 사용자+비번 · 12 SAML (HS2는 2) |
ThriftTransport | 전송 방식 | 0 Binary · 1 SASL · 2 HTTP (HS2는 1) |
HTTPPath | HTTP 모드일 때 경로 | 서버 기본값은 보통 cliservice |
SSL | SSL 암호화 | 0, 1 (0) |
UID / PWD | 사용자 이름 / 비밀번호 | 사용자 이름 인증의 기본 사용자는 anonymous |
RowsFetchedPerBlock | 한 번에 가져올 행 수 | (10000) 이보다 키워도 효과가 거의 없음 |
UseNativeQuery | 쿼리를 HiveQL 그대로 보낼지 | 0, 1 (0) — 1이면 ? 파라미터 쿼리를 못 씀 |
SocketTimeout | 비동기 실행 시 유휴 제한(초) | (60) |
LogLevel / LogPath | 드라이버 로그 | 0 끔 ~ 6 TRACE (0) / 로그 폴더 |
5연결 테스트
코드를 짜기 전에 아래 순서로 확인하면 문제를 빨리 좁힐 수 있습니다.
- 네트워크: 이 PC에서 Hive 서버 포트까지 열려 있는지 봅니다.
TcpTestSucceeded : True가 나와야 합니다. - DSN: ODBC 관리자의 DSN 설정 창에서 Test를 누릅니다.
- 쿼리: PowerShell에서 실제 쿼리를 날려 봅니다. 64비트 드라이버는 64비트 PowerShell(기본), 32비트 드라이버는
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe에서 실행하세요.
# 1) 포트 확인
Test-NetConnection hive-server01 -Port 10000
# 2) DSN으로 SHOW DATABASES 실행
$conn = New-Object System.Data.Odbc.OdbcConnection "DSN=HiveProd;UID=etl_user;PWD=********;"
try {
$conn.Open()
$cmd = $conn.CreateCommand()
$cmd.CommandText = "SHOW DATABASES"
$reader = $cmd.ExecuteReader()
while ($reader.Read()) { $reader.GetString(0) }
}
finally {
$conn.Close()
}
6자주 나는 오류
IM002 데이터 원본 이름이 없고 기본 드라이버를 지정하지 않았습니다
비트 수가 다르거나 이름이 틀린 경우가 대부분입니다.
- 프로그램과 드라이버·DSN의 비트 수가 같은지 확인합니다. C#이면 플랫폼 대상을
x64로 두고 "32비트 선호"를 끕니다. Driver={...}이름이Get-OdbcDriver결과와 글자까지 같은지 봅니다.- DSN을 쓴다면 같은 비트 수의 ODBC 관리자에 만들었는지 확인합니다.
연결 시간 초과 / 연결 거부
방화벽이나 포트 문제입니다. Test-NetConnection으로 포트를 확인하고, HiveServer2가 실제로 그 포트에서 떠 있는지(binary 10000, http는 클러스터 설정) 관리자에게 확인하세요.
인증 실패 / SASL 오류 / 연결 직후 끊김
서버의 hive.server2.authentication·transport.mode와 AuthMech·ThriftTransport 조합이 맞지 않는 경우입니다.
1단계 표대로 다시 맞춰 보세요. 예를 들어 서버가 http 모드인데 ThriftTransport=1이면 붙지 않습니다.
Kerberos로 바꿨더니 연결이 안 됨
Kerberos는 Binary(ThriftTransport=0)를 지원하지 않습니다. SASL(1)이나 HTTP(2)로 바꾸세요.
MIT Kerberos를 설치하지 않았다면 UseOnlySSPI=1로 Windows 인증을 쓰는 방법도 있습니다.
SSL 옵션이 회색으로 막혀 있음
인증 방식이 User Name(AuthMech=2)이면 SSL을 쓸 수 없습니다. 서버가 SSL을 요구한다면 보통 LDAP(3)이나 Kerberos(1)와 함께 씁니다.
? 파라미터 쿼리에서 오류
UseNativeQuery=1이면 드라이버가 파라미터 쿼리를 실행하지 못합니다. C# 예제처럼 ?를 쓴다면 이 값을 0(기본값)으로 두세요.
오래 걸리는 INSERT OVERWRITE가 중간에 끊김
드라이버가 아니라 코드의 명령 타임아웃 때문입니다. .NET의 OdbcCommand.CommandTimeout 기본값은 30초라서 MapReduce·Tez 작업에는 짧습니다. 넉넉하게 늘리거나 0(무제한)으로 두세요.
드라이버 로그 켜기
원인을 모르겠으면 드라이버 로그를 잠깐 켜서 봅니다. DSN 설정 창의 Logging Options에서 켜거나, 연결 문자열에 아래 키를 붙입니다. 로그는 성능을 떨어뜨리고 용량을 많이 차지하므로 문제를 재현할 때만 켜고 끄세요.
LogLevel=5;LogPath=C:\logs\hive-odbc;
LogLevel은 0(끔), 1 FATAL, 2 ERROR, 3 WARNING, 4 INFO, 5 DEBUG, 6 TRACE입니다. 폴더에 clouderaodbcdriverforapachehive_connection_N.log 파일이 연결마다 생깁니다.
참고 자료
드라이버 버전마다 메뉴 이름과 기본값이 조금씩 다를 수 있으니, 설치한 버전의 안내서를 함께 확인하세요.