You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:51:00