GCP Dataproc serverless - Failed to load class of driverClassName com.microsoft.sqlserver.jdbc.SQLServerDriver

147 Views Asked by At

I have a java spark job written using Spring boot. I will need to call MS SQL DB to get the prop/values before starting the spark operations. In my local, I was able to run the spark job by passing the driver class in spark extra classpth.

I have also tried to set the extraclass path using the dataproc env variable.spark.dataproc.driverEnv.SPARK_EXTRA_CLASSPATH. SPARK_EXTRA_CLASSPATH=gs://XXXX/XXXX/mssql-jdbc-12.2.0.jre11.jar I see the above path is printed in the log. But still I am getting error

Caused by: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver.

Error:

Caused by: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at com.zaxxer.hikari.HikariConfig.setDriverClassName(HikariConfig.java:318)

Code:

 public DataSource getDataSource() {
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
    dataSourceBuilder.driverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    dataSourceBuilder.username(config.getSqlUser());
    dataSourceBuilder.password(config.getSqlPass());
    dataSourceBuilder.url(config.getSqlUrl());
    return dataSourceBuilder.build();
  }

Do we have any option available without creating an custom image to preappend the lib into the default container using extra classpath?

0

There are 0 best solutions below