티나 개발 노트
Windows Cloudera Hive ODBC 2.7 HiveServer2

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)
NONEUser Name (2)binary → SASL (1) · http → HTTP (2)
LDAPUser Name And Password (3)binary → SASL (1) · http → HTTP (2)
KERBEROSKerberos (1)binary → SASL (1) · http → HTTP (2)
NOSASLNo Authentication (0)Binary (0)만 가능
SAMLSAML 2.0 (12)HTTP (2)만 가능
💡

대부분의 HiveServer2 기본 설정은 User Name 인증입니다. 회사 클러스터는 보통 LDAP(AuthMech=3)이나 Kerberos(AuthMech=1)를 씁니다. 포트는 binary 모드 기본값이 10000입니다. http 모드는 클러스터마다 다르니 관리자에게 확인하세요.

2드라이버 설치

설치 전 확인

비트 수 고르기

64비트 Windows에서는 32비트와 64비트 프로그램이 모두 돌지만, 프로그램과 드라이버의 비트 수가 같아야 합니다. 두 버전을 한 PC에 같이 설치해도 됩니다.

연결하는 프로그램설치 파일ODBC 관리자 위치
64비트 (C# x64 빌드 등)ClouderaHiveODBC64.msiC:\Windows\System32\odbcad32.exe
32비트 (C# x86, "32비트 선호" 등)ClouderaHiveODBC32.msiC:\Windows\SysWOW64\odbcad32.exe
⚠️

파일 이름과 반대로 System32에 있는 것이 64비트용, SysWOW64에 있는 것이 32비트용 ODBC 관리자입니다. 시작 메뉴에서는 "ODBC 데이터 원본(64비트)"처럼 비트 수가 붙어 나옵니다.

설치 순서

  1. 비트 수에 맞는 msi 파일을 더블클릭해 실행합니다.
  2. Next → 사용권 계약 동의 → 설치 위치 확인 → Install → Finish를 누릅니다.
  3. 설치가 끝나면 PowerShell에서 드라이버가 등록됐는지 확인합니다. 여기에 나온 이름 그대로 연결 문자열의 Driver={...}에 써야 합니다.
PowerShell — 설치된 Hive 드라이버 확인
Get-OdbcDriver -Name "*Hive*" | Select-Object Name, Platform

3DSN 만들기

DSN(데이터 원본 이름)은 접속 정보를 Windows에 저장해 두는 것입니다. DSN을 만들어 두면 코드에서는 DSN=HiveProd;UID=...;PWD=...;만 쓰면 됩니다. DSN 없이 연결 문자열에 모든 값을 직접 써도 되고, 둘 다 쓰면 연결 문자열 값이 DSN보다 우선합니다.

  1. 시작 메뉴에서 ODBC 데이터 원본을 엽니다. 프로그램과 같은 비트 수의 관리자를 골라야 합니다.
  2. 드라이버 탭에 Cloudera ODBC Driver for Apache Hive가 있는지 확인합니다.
  3. 시스템 DSN 탭 → 추가를 누릅니다. 작업 스케줄러나 서비스처럼 다른 계정으로 도는 프로그램은 사용자 DSN을 못 찾으므로 시스템 DSN을 권장합니다.
  4. Cloudera ODBC Driver for Apache Hive를 고르고 마침을 누릅니다.
  5. 설정 창에서 아래 값을 채웁니다.
    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단계 표에서 고른 전송 방식
  6. 필요하면 SSL Options, Advanced Options, Logging Options를 설정합니다.
  7. Test를 눌러 연결을 확인하고 OK로 저장합니다.

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=********;

자주 쓰는 연결 문자열 키

키뜻값 (기본값)
Host / PortHiveServer2 주소와 포트포트는 보통 10000
Schema기본 데이터베이스(default)
HiveServerTypeHive 서버 종류1, 2 (2)
AuthMech인증 방식0 없음 · 1 Kerberos · 2 사용자 이름 · 3 사용자+비번 · 12 SAML (HS2는 2)
ThriftTransport전송 방식0 Binary · 1 SASL · 2 HTTP (HS2는 1)
HTTPPathHTTP 모드일 때 경로서버 기본값은 보통 cliservice
SSLSSL 암호화0, 1 (0)
UID / PWD사용자 이름 / 비밀번호사용자 이름 인증의 기본 사용자는 anonymous
RowsFetchedPerBlock한 번에 가져올 행 수(10000) 이보다 키워도 효과가 거의 없음
UseNativeQuery쿼리를 HiveQL 그대로 보낼지0, 1 (0) — 1이면 ? 파라미터 쿼리를 못 씀
SocketTimeout비동기 실행 시 유휴 제한(초)(60)
LogLevel / LogPath드라이버 로그0 끔 ~ 6 TRACE (0) / 로그 폴더

5연결 테스트

코드를 짜기 전에 아래 순서로 확인하면 문제를 빨리 좁힐 수 있습니다.

  1. 네트워크: 이 PC에서 Hive 서버 포트까지 열려 있는지 봅니다. TcpTestSucceeded : True가 나와야 합니다.
  2. DSN: ODBC 관리자의 DSN 설정 창에서 Test를 누릅니다.
  3. 쿼리: PowerShell에서 실제 쿼리를 날려 봅니다. 64비트 드라이버는 64비트 PowerShell(기본), 32비트 드라이버는 C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe에서 실행하세요.
PowerShell — 포트 확인과 쿼리 테스트
# 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 데이터 원본 이름이 없고 기본 드라이버를 지정하지 않았습니다

비트 수가 다르거나 이름이 틀린 경우가 대부분입니다.

  1. 프로그램과 드라이버·DSN의 비트 수가 같은지 확인합니다. C#이면 플랫폼 대상을 x64로 두고 "32비트 선호"를 끕니다.
  2. Driver={...} 이름이 Get-OdbcDriver 결과와 글자까지 같은지 봅니다.
  3. 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 파일이 연결마다 생깁니다.

🧑‍💻 다음 단계C#에서 Hive 조회·적재하기 (예제 코드) →

참고 자료

드라이버 버전마다 메뉴 이름과 기본값이 조금씩 다를 수 있으니, 설치한 버전의 안내서를 함께 확인하세요.