I’m trying to create a DF using jdbc as detailed here – I’m currently using DB2 v184.108.40.206 and I’ve tried to use the db2jcc.jar and db2jcc_license_cu.jar combo, and while it works in --master local using the command below, I get some strange behavior in --master yarn-client. Here is the command:
val df = sql.load("jdbc", Map("url" -> "jdbc:db2://<host>:<port>/<db>:currentSchema=<schema>;user=<user>;password=<password>;", "driver" -> "com.ibm.db2.jcc.DB2Driver", "dbtable" -> "<table>"))
It seems to also be working on yarn-client because once executed I get the following log:
df: org.apache.spark.sql.DataFrame = [DATE_FIELD: date, INT_FIELD: int, DOUBLE_FIELD: double]
Which indicates me that Spark was able to connect to the DB. But once I run df.count() or df.take(5).foreach(println) in order to operate on the data and get a result, I get back a ‘No suitable driver found’ exception, which makes me think the driver wasn’t shipped with the spark job.
I’ve tried using --driver-class-path, --jars, SPARK_CLASSPATH to add the jars to the spark job. I also have the jars in my$CLASSPATH and $HADOOP_CLASSPATH.
I also saw this in the trouble shooting section, but quite frankly I’m not sure what primordial class loader it’s talking about:
The JDBC driver class must be visible to the primordial class loader on the client session and on all executors. This is because Java’s DriverManager class does a security check that results in it ignoring all drivers not visible to the primordial class loader when one goes to open a connection. One convenient way to do this is to modify compute_classpath.sh on all worker nodes to include your driver JARs.
Any advice is welcome!