如何为Spark JDBC连接指定信任存储和信任存储类型

时间:2018-02-06 20:36:58

标签: oracle apache-spark truststore spark-jdbc

我是Spark新手,我们目前正在使用spark-java从Oracle数据库创建orc文件。我能够用

配置连接
sqlContext.read().jdbc(url,table,props)

但是,我无法在属性中找到任何指定trustStore或trustStoreType的方法。有人可以帮助我如何指定这些属性吗?

我已经尝试将属性填充为

 props.put("trustStore", "<PATH_TO_SSO>");
 props.put("trustStoreType", "sso");

但它对我不起作用

UPDATE1: 我已经尝试了user8371915的建议,并将sso文件放在我的两个执行器节点中。我仍然得到以下异常(删节版)

oracle.net.ns.NetException: The Network Adapter could not establish the connection
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:470)
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:506)
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:595)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:230)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1452)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496)
    ... 23 more
Caused by: oracle.net.ns.NetException: Unable to initialize ssl context.
    at oracle.net.nt.CustomSSLSocketFactory.getSSLSocketFactory(CustomSSLSocketFactory.java:325)
    at oracle.net.nt.TcpsNTAdapter.connect(TcpsNTAdapter.java:117)
    at oracle.net.nt.ConnOption.connect(ConnOption.java:159)
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:428)
    ... 28 more
Caused by: oracle.net.ns.NetException: Unable to initialize the trust store.
    at oracle.net.nt.CustomSSLSocketFactory.getTrustManagerArray(CustomSSLSocketFactory.java:413)
    at oracle.net.nt.CustomSSLSocketFactory.getSSLSocketFactory(CustomSSLSocketFactory.java:309)
    ... 31 more
Caused by: java.security.KeyStoreException: sso not found
    at java.security.KeyStore.getInstance(KeyStore.java:851)
    at oracle.net.nt.CustomSSLSocketFactory.getTrustManagerArray(CustomSSLSocketFactory.java:401)
    ... 32 more
Caused by: java.security.NoSuchAlgorithmException: sso KeyStore not available
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
    at java.security.Security.getImpl(Security.java:695)
    at java.security.KeyStore.getInstance(KeyStore.java:848)
    ... 33 more

1 个答案:

答案 0 :(得分:0)

首先(Xephithis answer)信用额度为javax.net.ssl.trustStorejavax.net.ssl.trustStoreType

第二个问题是每个执行程序节点上都应该可以访问trustStore。无法从驾驶员那里获得它。