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更密切。