如何使用Oracle Wallet实现PySpark安全连接Oracle数据库
PySpark使用Oracle Wallet免密连接Oracle数据库方案
前置准备校验
你需要先确认本地配置的Oracle Wallet满足以下要求:
- Wallet目录下存在
cwallet.sso(自动登录凭证文件)、ewallet.p12(加密凭证库)、tnsnames.ora三个核心文件 tnsnames.ora中已配置目标数据库的TNS别名,例如别名ORCL_PROD对应原有连接串中的1.1.1.1.sample/SID连接信息- Wallet已正确存入该TNS别名对应的数据库账号密码,支持无需传入明文凭证完成认证
代码修改步骤
1. 初始化SparkSession时配置Wallet参数
需要在Driver和Executor的JVM启动参数中指定Wallet目录和TNS配置路径,替换示例中<Wallet本地目录>为你实际的Wallet文件存放路径:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("OracleWalletConnectDemo") \ .config("spark.driver.extraJavaOptions", "-Doracle.net.tns_admin=<Wallet本地目录> -Doracle.net.wallet_location=(source=(method=file)(method_data=(directory=<Wallet本地目录>)))") \ .config("spark.executor.extraJavaOptions", "-Doracle.net.tns_admin=<Wallet本地目录> -Doracle.net.wallet_location=(source=(method=file)(method_data=(directory=<Wallet本地目录>)))") \ .getOrCreate()
如果是集群部署模式,需要保证所有Worker节点的<Wallet本地目录>路径和Driver节点完全一致,或者通过作业提交参数分发Wallet文件。
2. 修改JDBC连接配置
移除原代码中的明文账号密码配置,连接URL中的地址替换为tnsnames.ora中配置的TNS别名:
# 连接属性已移除user、pwd明文配置 driver = 'oracle.jdbc.driver.OracleDriver' # @后替换为你的TNS别名,例如ORCL_PROD connString = 'jdbc:oracle:thin:@ORCL_PROD' jdbc_dict = {'driver': driver, 'connection': connString} df_table = spark.read.format('jdbc')\ .option('driver', jdbc_dict['driver'])\ .option('url', jdbc_dict['connection'])\ .option('dbtable', table_name)\ .load()
3. 命令行提交作业参数示例
如果通过spark-submit提交作业,可以直接将配置写在命令行中,无需写在代码里:
spark-submit \ --conf "spark.driver.extraJavaOptions=-Doracle.net.tns_admin=/data/oracle_wallet -Doracle.net.wallet_location=(source=(method=file)(method_data=(directory=/data/oracle_wallet)))" \ --conf "spark.executor.extraJavaOptions=-Doracle.net.tns_admin=/data/oracle_wallet -Doracle.net.wallet_location=(source=(method=file)(method_data=(directory=/data/oracle_wallet)))" \ --jars ojdbc8.jar \ your_spark_script.py
注意事项
- 需要使用11g R2及以上版本的Oracle JDBC驱动,推荐使用
ojdbc8.jar适配JDK8+环境 - 如果开启了Kerberos认证等额外安全策略,需要在JVM参数中追加对应的认证配置
- 确保Spark作业的运行用户对Wallet目录下的所有文件有可读权限
内容的提问来源于stack exchange,提问作者F.Peconi
相关产品推荐
相关产品推荐

