2017-08-01 9 views
1

sqlContext.read.format("json")メソッドでOracleに接続しようとしています。すべてが良い起こっているが、JDBC文字列を作成している間、私は文字列で、データベースのユーザー名とパスワードを指定する必要があります。Spark JDBCでjceksファイルを指定する

val jdbcString = "jdbc:oracle:thin:USERNAME/[email protected]//HOSTNAME:PORT/SID" 

しかし、私はパスワードが含まれていHDFS上に存在jceksファイルを持っています。プレーンテキストパスワードではなくJDBCに接続するために、そのファイルを利用できる方法があるかどうか疑問に思っていましたか? Sqoopの場合と同様に、以下を実行できます。

sqoop import -Dhadoop.security.credential.provider.path=jceks://hdfs/data/credentials/oracle.password.jceks 

ありがとうございます。

答えて

1

これはCredentialProviderFactoryを使用して達成されました。

import org.apache.hadoop.security.alias.CredentialProviderFactory 

val conf = new org.apache.hadoop.conf.Configuration() 
val alias = "password.alias" 
val jceksPath = "jceks://hdfs/user/data/alias/MySQL.password.jceks" 

conf.set(CredentialProviderFactory.CREDENTIAL_PROVIDER_PATH, jceksPath) 

//getPassword Returns Array[Char] 
val password = conf.getPassword(alias).mkString 
0

Oracle JDBC Thinドライバでは、jceksファイルからパスワードを抽出することはできません。代わりにウォレットをサポートしています(パスワードはウォレットに保存できます)。

+0

私はjceksファイルを使用していますが、何の問題もなくsqoopingしています。この問題は、HadoopとSparkとOracleよりも密接に関連しています。 – philantrovert

関連する問題