Spark Thrift Server Configuration & Connection
Spark Thrift Server Configuration
Spark Thrift Server 가 Apache Ambari 로 설치하였다고 가정합니다.
Spark Thrift Server 설정
Spark CONFIGS 로 이동하여 아래와 같이 설정을 합니다.
# Advanced spark2-hive-site-override spark.thrift.server.port: 10015 (Default) hive.server2.transport.mode: binary (Default) # Custom spark2-hive-site-override spark.thrift.server.client.protocol: binary # Custom spark2-thrift-sparkconf, (in Secure Hadoop) spark.thrift.authentication: KERBEROS spark.thrift.server.keytab: /etc/security/keytabs/spark.keytab spark.thrift.server.principal: spark/_HOST@<REALM> spark.thrift.server.transport.mode: binary (Default)
접속 주소 구성
접속 주소는 다음과 같습니다.
jdbc:hive2://<호스트명 또는 IP>:<포트>/
i.e. jdbc:hive2://spark-thrift-host:10015/
Client 를 통한 접속
사용자 인증이 어떻게 구성한 것에 따라서 Kerberos, LDAP, NONE 으로 설정합니다.
Kerberos
kinit <user>
beeline -u "jdbc:hive2://spark-thrift-host:10015/default;principal="
LDAP
- beeline -u "jdbc:hive2://spark-thrift-host:10015" -n -p
NONE
- beeline -u "jdbc:hive2://spark-thrift-host:10015" -n -p
Beeline 사용
- beeline -u "jdbc:hive2://spark-thrift-host:10015/" -n 사용자이름 -p 비밀번호
JDBC Client 사용
JDBC Driver 가 필요하며, 일반적으로 Hive JDBC Driver 를 사용
Client 에서 접속 URL, 사용자 이름, 비밀번호를 입력하여 접속
문제 해결
beeline 을 실행할때, 오류 메시지가
Hive JDBC Driver 가 없을 경우
Hive JDBC Driver 를 설치합니다.
Ubuntu, Debian
sudo apt-get install hive-jdbc
Redhat, CentOS
sudo yum install hive-jdbc
Hive JDBC Driver 가 이미 있는 경우에는 Driver 를 명시적으로 지정합니다.
beeline --hiveconf hive.jdbc.driver.path=/usr/lib/hive/lib/hive-jdbc-standalone.jar -u "jdbc:hive2://spark-thrift-host:10015" -n -p
beeline 명령어의 Classpath 설정을 합니다.
Hive JDBC Driver 의 경로를 beeline 의 실행 환경에 설정합니다.
export CLASSPATH=$CLASSPATH:/usr/lib/hive/lib/hive-jdbc-standalone.jar
beeline 을 실행할 때, 아래와 같은 오류 메시지가 나오면서 접속이 안될때
Error: Could not open client transport with JDBC Uri: jdbc:hive2://spark-thrift-host:10015/default;principal=spark/spark-thrift-host@EXAMPLE.COM: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{...})
원인
Client (Beeline)와 Spark Thrift Server 간의 Protocol version 불일치 또는 호환성 문제로 인해 발생할 수 있습니다.
특히,
client_protocol
필드가 설정되지 않았다는 메시지는 Client 가 서버와 통신할 때 필요한 Protocol 정보를 제공하지 않았음을 나타냅니다.
해결 방안
Spark 2.x 는 Hive 1.2.1 과 호환되는 HiveServer2 Protocol 을 사용
Spark 3.x 는 Hive 2.3.x 와 호환됩니다.
Spark 과 같이 bundle 된 beeline 을 사용합니다.
$SPARK_HOME/bin/beeline -u "jdbc:hive2://spark-thrift-host:10015/default;principal=spark/spark-thrift-host@EXAMPLE.COM
Spark Thrift Server Connection
Beeline 을 사용하여 접속
Spark 에 동봉된 beeline 을 사용
Spark 2.x 는 Hive 1.2.1 과 호환되는 HiveServer2 프로토콜을 사용
접속하기 전에 정해진 인증 방법을 통해서 인증을 진행합니다.
- Kerberos, LDAP, NONE
./beeline -u "jdbc:hive2://spark-thrift-host:10015/default;principal=spark/spark-thrift-host@EXAMPLE.COM"
jdbc:hive2://spark-thrift-host:10015/ 뒤에 오는 것은 hive DB 를 의미합니다. (default)
필요시 Hive JDBC path 를 명시적으로 주어서 접속을 해야 할수도 있습니다.
./beeline --hiveconf ./hive-jdbc-standalone.jar -u "jdbc:hive2://spark-thrift-host:10015/default;principal=spark/spark-thrift-host@EXAMPLE.COM"
JDBC Client 사용
Hive JDBC Driver 필요 (i.e. hive-jdbc-<version>-standalone.jar)
드라이버는 Hadoop Package 의 Hive 또는 Spark Package 에 포함되어 있으며, 직접 다운로드 하거나 설치할 수 있습니다.
$SPARK_HOME/jars/hive-jdbc-<version>-standalone.jar 에 위치
Java Program 을 작성하시거나, DBeaver, IntelliJ Plugin 등 다양한 방법을 사용하실 수 있습니다.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class HiveJDBCClient { private static String driverName = "org.apache.hive.jdbc.HiveDriver"; public static void main(String[] args) throws Exception { // Hive JDBC URL (Kerberos 인증) String jdbcURL = "jdbc:hive2://spark-thrift-host/default;principal=spark/spark-thrift-host@EXAMPLE.COM"; // JDBC 드라이버 로드 Class.forName(driverName); // 연결 생성 Connection conn = DriverManager.getConnection(jdbcURL); Statement stmt = conn.createStatement(); // Query 실행 예시 String sql = "SELECT * FROM your_table LIMIT 10"; ResultSet res = stmt.executeQuery(sql); // 결과 출력 while (res.next()) { System.out.println(res.getString(1) + "\t" + res.getString(2)); } // 연결 종료 res.close(); stmt.close(); conn.close(); } }
DBeaver 사용시 설정 방법
DBeaver 에서 새로운 연결을 만들고, 드라이버를 추가합니다.
Hive JDBC Driver JAR 파일을 DBeaver 에 등록합니다.
JDBC URL 입력: jdbc:hive2://<호스트명>:<포트>/default;principal=<Kerberos Principal>
Kerberos 인증을 사용하는 경우 principal parameter 를 입력하고, 별도의 사용자 이름 및 비밀번호를 입력할 필요는 없습니다.
문제 발생시
JDBC Driver 가 없거나 잘못된 경우
JDBC URL 형식이 잘못되었거나, JDBC Driver 가 누락되면 No suitable driver found 오류가 발생할 수 있습니다.
이 경우 Hive JDBC Driver 가 올바르게 Load 되었는지, JDBC URL 이 정확한지 확인합니다.
인증 오류
- Kerberos 인증을 사용 중인데 인증 관련 오류가 발생하면, kinit 으로 Kerberos Ticket 을 다시 획득합니다.
네트워크 문제
- Host 및 Port 가 올바른지, Network 나 방화벽 설정으로 인해 Thrift Server 에 접근이 차단되고 있지 않은지 확인합니다.
ODBC Client 사용
JDBC 와 유사하지만, ODBC Driver 를 사용해 SQL Query 를 실행합니다.
ODBC 는 주로 Windows 환경에서 널리 사용하지만, Mac 과 Linux 에서도 사용가능.
Hive ODBC Driver 를 설치해야 합니다.
Cloudera 에서 주로 download 합니다.
각자의 OS 맞게 적절히 설치를 진행합니다.
Windows 데이터 소스 설정
DSN 이름을 입력합니다.
Host: Spark Thrift Server가 실행 중인 호스트의 IP 또는 Domain 이름
Port: Spark Thrift Server의 포트 번호(기본값은 10015)
Database: 사용할 Database (기본값은 default)
Authentication Mechanism: 인증 메커니즘을 설정합니다
- Kerberos, LDAP, None 등
Kerberos 사용 시: Kerberos Principal 을 설정합니다.
예제
Host: spark-thrift-host
Port: 10015
Database: default
Authentication Mechanism: Kerberos
Kerberos Principal: spark/spark-thrift-host@EXAMPLE.COM
MacOS/Linux 데이터 소스 설정
~/.odbc.ini 파일 또는 /etc/odbc.ini 파일을 수정
예제
[SparkThriftServer] Driver=/usr/local/lib/hiveodbc/lib/universal/libclouderahiveodbc.dylib Host=spark-thrift-host Port=10015 Database=default AuthMech=1 KrbHostFQDN=spark-thrift-host KrbServiceName=spark KrbRealm=EXAMPLE.COM
odbcinst.ini 파일 확인
ODBC 드라이버가 제대로 설치되었는지 확인하기 위해 odbcinst.ini 파일을 확인
[ODBC Drivers] Cloudera Hive ODBC Driver=Installed [Cloudera Hive ODBC Driver] Description=Cloudera ODBC Driver for Apache Hive Driver=/opt/cloudera/hiveodbc/lib/universal/libclouderahiveodbc.dylib
ODBC Client 에서 연결
연결에 앞서 Kerberos 인증을 먼저 수행하도록 합니다.
Windows 에서 연결
Excel 에서 ODBC 연결
Tableau 에서 ODBC 연결
Linux/Mac에서 isql 사용
Linux/Mac 에서
isql
을 설치하여 ODBC 연결을 테스트할 수 있습니다.ODBC 연결 테스트
설정한 DSN 으로 Spark Thrift Server 에 연결합니다
isql SparkThriftServer
Subscribe to my newsletter
Read articles from Gyuhang Shim directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Gyuhang Shim
Gyuhang Shim
Gyuhang Shim Passionate about building robust data platforms, I specialize in large-scale data processing technologies such as Hadoop, Spark, Trino, and Kafka. With a deep interest in the JVM ecosystem, I also have a strong affinity for programming in Scala and Rust. Constantly exploring the intersections of high-performance computing and big data, I aim to innovate and push the boundaries of what's possible in the data engineering world.