본문 바로가기
빅데이터/spark

[spark] Exception in thread "main" java.sql.SQLException: No suitable driver 오류 해결 방법

by hs_seo 2019. 11. 13.

스파크 SQL에서는 JDBC 드라이버를 이용해서 데이터베이스에 접근할 때 다음과 같은 오류가 발생하는 경우가 있습니다.

에러 로그

19/11/12 03:07:36 INFO StateStoreCoordinatorRef: Registered StateStoreCoordinator endpoint
Exception in thread "main" java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(DriverManager.java:315)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$6.apply(JDBCOptions.scala:105)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$6.apply(JDBCOptions.scala:105)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:104)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:35)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:32)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:318)
    at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223)

원인

  • JDBC 라이브러리가 정의되지 않았을 때
  • JDBC URL이 제대로 전달되지 않았을 때

해결방법

JDBC URL이 제대로 전달되지 않았을 때

JDBC URL의 드라이버를 결정하는 스키마 정보가 제대로 전달되지 않았을 때 해당 오류가 발생합니다. jdbc:postgressql, jdbc:mysql과 같이 정확한 스키마 정보가 전달되었는지 다시 확인합니다.

val jdbcDF = spark.read
  .format("jdbc")
  .option("url", "jdbc:postgresql:dbserver")
  .option("dbtable", "schema.tablename")
  .option("user", "username")
  .option("password", "password")
  .load()

JDBC 라이브러리 정의 방법

라이브러리가 제대로 전달되지 않는 경우에 발생할 수도 있습니다. 이때는 driver-class-pathjars에 드라이버 jar 파일을 전달하면 됩니다.

$ spark-submit --master yarn \
  --driver-class-path mysql-connector-java-5.1.41.jar \
  --jars mysql-connector-java-5.1.41.jar

참고

반응형