KEEP GOING
[Spark][Tibero] ClassNotFoundException: com.tmax.tibero.jdbc.tbdriver 에러 해결 본문
[Spark][Tibero] ClassNotFoundException: com.tmax.tibero.jdbc.tbdriver 에러 해결
jmHan 2023. 5. 8. 17:22목차
ClassNotFoundException 오류 원인
SparkSession으로 spark 객체를 생성하고, spark.read.jdbc()로 tibero db에 연결하여 테이블을 spark df로 읽어오는 과정이었습니다. 이 과정에서 ClassNotFoundException: com.tmax.tibero.jdbc.tbdriver 라는 오류가 발생했습니다.
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('jdbc connect test')\
.getOrCreate()
df = spark.read.format("jdbc")\
.option("driver", "com.tmax.tibero.jdbc.TbDriver")\
.option("url", "jdbc:tibero:server_ip:server_port/sid")
.option("dbtable", "db_name.table_name")\
.option("user", "root")\
.option("password", "*******")
.load()
* jdbc로 데이터베이스에 연결하는 방법은 Apache Spark docs에 자세히 나와 있습니다.
spark로 jdbc 연결하는 방법을 자세히 알고 싶다면 아래 문서를 참고하면 됩니다. (사용 중인 spark 버전 정보가 2.4 버전이어서 아래 공식 문서를 참고하였습니다.)
https://spark.apache.org/docs/2.4.4/sql-data-sources-jdbc.html
다음과 같은 오류가 발생하는 원인은 스파크 경로 내에서 jdbc 연결에 필요한 driver 파일이 발견되지 않기 때문입니다.
해결 방법
먼저, db 연결에 필요한 jdbc 파일을 찾아야 합니다. 드라이버 파일은 티베로가 설치된 디렉터리 내에 있습니다.
티베로를 설치하여 사용 중이라면 $TB_HOME/client/lib/jar 경로에 가서 드라이버 파일을 찾으면 됩니다.
드라이버 파일은 해당 경로 내에 tibero6-jdbc.jar과 같은 형태로 존재합니다.
이제 발견한 jdbc 파일을 spark가 찾을 수 있도록 $SPARK_HOME/jars 디렉터리에 해당 파일을 옮깁니다.
제대로 옮겼다면 sparkUI의 Environment 환경의 Classpath Entries 목록에 해당 *.jar 파일이 존재하는 것을 확인할 수 있습니다.
참고)
https://sparkbyexamples.com/spark/spark-read-jdbc/
https://spark.apache.org/docs/2.4.4/sql-data-sources-jdbc.html
'bigdata > spark' 카테고리의 다른 글
[spark] pyspark datframe: filter 메서드 총 정리 (0) | 2023.06.09 |
---|---|
[Spark] Spark Configuration 적용 방식(SparkConf, spark-shell, spark-default.conf)과 주 (0) | 2023.05.09 |
[Spark] 스파크 버전 확인하기 (0) | 2023.01.10 |
[Spark] Pyspark Dataframe 주요 메서드 샘플 정리(concat_ws, regexp_replace, explode, withColumnRenamed) (0) | 2022.12.21 |
[Spark] 스파크 데이터프레임(DataFrame) 개념 파악하기 (0) | 2022.10.26 |