Spark JDBC connectivity to SQL server using kerberos authentication in Java

Viewed 281

I have a use case where the Saprk Data Set API has to connect to SQL server using jdbc to retrieve the data.

The DB is supporting the kerberos authentication thats why using Spring JTDS driver. The code for JDBC connectivity is as :

/**
 * Returns the data source for db connection
 * @return
 * @throws Exception
 */
private static DriverManagerDataSource getDataSource() throws Exception {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();

    dataSource.setDriverClassName("net.sourceforge.jtds.jdbc.Driver");
    String dataSourceUrl = "jdbc:jtds:sqlserver://" + "DBDEV.abc.com" + "/"
            + "TestDB";
    dataSource.setUrl(dataSourceUrl);

    Properties connProps = new Properties();
    connProps.setProperty(DescapDataConstants.APP_NAME_PROPERTY, "Test");
    connProps.setProperty(DescapDataConstants.USE_KERBEROS, Boolean.TRUE.toString());
    connProps.setProperty(DescapDataConstants.LOGIN_TIMEOUT, "60");
    connProps.setProperty(DescapDataConstants.SOCKET_TIMEOUT, "7200");
    dataSource.setConnectionProperties(connProps);
    return dataSource;
}

But there is no provision to use this Data source as per Spark JDBC API when checked on this page : https://spark.apache.org/docs/2.3.1/api/java/org/apache/spark/sql/DataFrameReader.html#jdbc-java.lang.String-java.lang.String-java.util.Properties-

Is there any way to use Data Source for connecting to the JDBC via Spark API's.

1 Answers

As already noted in the comments and from a quick look at the source code here, it looks like the implementation does not indeed support a datasource lookup.

One option is to extend below source code and to extend it to accept a connection object itself and to figure out error handling and remember to close it!

Related