Hadoop 使用Spark JDBC指定jceks文件

Hadoop 使用Spark JDBC指定jceks文件,hadoop,apache-spark,jdbc,apache-spark-sql,Hadoop,Apache Spark,Jdbc,Apache Spark Sql,我正试图通过sqlContext.read.format(“json”)方法连接到Oracle。一切都很顺利,但在创建JDBC字符串时,我必须在字符串中指定数据库的用户名和密码: val jdbcString = "jdbc:oracle:thin:USERNAME/PASSWORD@//HOSTNAME:PORT/SID" 但是,我在HDFS上确实有一个包含密码的jceks文件。我想知道是否有任何方法可以利用该文件连接到JDBC而不是纯文本密码?与Sqoop一样,我们可以: sqoop im

我正试图通过
sqlContext.read.format(“json”)
方法连接到Oracle。一切都很顺利,但在创建JDBC字符串时,我必须在字符串中指定数据库的用户名和密码:

val jdbcString = "jdbc:oracle:thin:USERNAME/PASSWORD@//HOSTNAME:PORT/SID"
但是,我在HDFS上确实有一个包含密码的
jceks
文件。我想知道是否有任何方法可以利用该文件连接到JDBC而不是纯文本密码?与Sqoop一样,我们可以:

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

谢谢。

Oracle JDBC精简驱动程序不支持从jceks文件提取密码。它支持钱包(密码可以存储在钱包中)。

Oracle JDBC瘦驱动程序不支持从jceks文件提取密码。它支持钱包(密码可以存储在钱包中)。

这是通过使用
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

这是通过使用
认证ProviderFactory
实现的

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

我在sqoop时使用jceks文件,没有任何问题。这个问题与Hadoop和Spark的关系比Oracle更密切。我使用jceks文件,而Sqoop没有任何问题。这个问题与Hadoop和Spark的关系比Oracle更密切。