如何使用Hadoop的凭据提供商星火连接到Oracle数据库?

问题描述 投票:0回答:3

我试图建立Spark和甲骨文以及Sqoop和Oracle之间的安全连接。我的研究后,我发现了两个不同的设置两个不同的选项。

  1. 其中密码被使用spark.jdbc.b64password并且进一步它在火花代码被解密和在JDBC URL用它加密连接火花到Oracle。
  2. 使用Hadoop凭据提供创建密码文件,并进一步将其已Sqoop被用来连接到Oracle。

现在保存密码两个不同的文件不似乎是一个很好的做法。我的问题是,我们可以使用Hadoop的凭据提供火花用于Sqoop创建的相同凭证的个人资料?

如果您有任何其他选项,以使这更好的,请帮助。

oracle hadoop apache-spark jdbc sqoop
3个回答
0
投票

推荐的方法是使用Kerberos身份验证无论是在Spark和Hadoop和与Oracle。 Oracle JDBC瘦驱动程序支持Kerberos身份验证。然后单个Kerberos主体用于验证用户从火花或Hadoop的Oracle数据库的所有道路。


0
投票

你可以使用火花支持的所有语言,从你的代码中读jecks密码:

蟒蛇:

spark1 = SparkSession.builder.appName("xyz").master("yarn").enableHiveSupport().config("hive.exec.dynamic.partition", "true").config("hive.exec.dynamic.partition.mode", "nonstrict").getOrCreate()
x = spark1.sparkContext._jsc.hadoopConfiguration()
x.set("hadoop.security.credential.provider.path", "jceks://file///localpathtopassword")
a = x.getPassword("<password alias>")
passw = ""
for i in range(a.__len__()):
   passw = passw + str(a.__getitem__(i))

在上面的代码,你将得到passw密码字符串

规模:

import org.apache.hadoop.security.alias.CredentialProvider
import org.apache.hadoop.security.alias.CredentialProvider.CredentialEntry
import org.apache.hadoop.security.alias.CredentialProviderFactory
import org.apache.hadoop.conf.Configuration


val conf_H: Configuration = new org.apache.hadoop.conf.Configuration()
val alias = password_alias
val jceksPath = security_credential_provider_path`enter code here`
conf_H.set(CredentialProviderFactory.CREDENTIAL_PROVIDER_PATH, jceksPath)
val pass = conf_H.getPassword(alias).mkString
if (pass != null && !pass.isEmpty() && !pass.equalsIgnoreCase("")) {
      jdbcPassword = pass
}

0
投票

你也可以让火花设置hadoop.security.credential.provider.path在这种方式Hadoop配置:

"""
Create java key store with following command:
> keytool -genseckey -alias duke -keypass 123456 -storetype jceks -keystore keystore.jceks
> export HADOOP_CREDSTORE_PASSWORD=123456
"""
jceks = os.path.join(os.path.dirname(__file__), "keystore.jceks")
print(jceks)
assert os.path.isfile(jceks)

spark_session = lambda: (SparkSession
                         .builder
                         .enableHiveSupport()
                         .config('spark.ui.enabled', False)
                          .config("spark.hadoop.hadoop.security.credential.provider.path",
                                 "jceks://file//" + jceks)
                         .getOrCreate())
with spark_session() as spark:
    hc = spark.sparkContext._jsc.hadoopConfiguration()
    jo = hc.getPassword("duke")

    expected_password = ''.join(jo)

    assert len(retrieved_password) > 0

spark.hadoop.hadoop.security.credential.provider.path是有点怪异,但火花切断spark.hadoop.前缀时负载的Hadoop设置

© www.soinside.com 2019 - 2024. All rights reserved.