AWS Glue中使用JDBC连接Oracle数据源导入表目录失败求助
AWS Glue Oracle JDBC数据源导入失败排查方案
- 确认JDBC连接配置正确性
- Glue默认提供的Oracle驱动兼容性有限,建议自行下载对应Oracle版本的ojdbc驱动jar包,上传到S3桶后,在Glue JDBC连接配置中指定驱动的S3路径
- 连接字符串注意区分服务名和SID格式:
- 服务名格式:
jdbc:oracle:thin:@//<Oracle主机地址>:<端口>/<服务名> - SID格式:
jdbc:oracle:thin:@<Oracle主机地址>:<端口>:<SID>
- 服务名格式:
- 检查网络和权限配置
- 如果Oracle部署在私有环境(本地IDC/EC2自托管/RDS),需要将Glue连接绑定到和Oracle网络互通的VPC、子网,对应安全组放开Glue子网IP段对Oracle 1521端口的入站访问
- 连接所用的Oracle账号必须授予
SELECT_CATALOG_ROLE角色,以及待同步表的SELECT权限,确保账号可以查询all_tables、all_tab_columns等系统视图
- 修正爬虫Include Path参数配置
- 路径必须严格遵循
<数据库名>/<Schema名>/<表名>格式,Oracle默认元数据为全大写,路径内容需和Oracle侧的对象大小写保持一致 - 爬取指定Schema下所有表时,使用通配符
%,示例:ORCL/HR/%(ORCL为数据库名,HR为Schema名) - Oracle 12c及以上多租户环境下,需连接到PDB而非CDB,否则路径会匹配不到对象
- 路径必须严格遵循
- 问题定位验证方法
- 优先查看爬虫关联的CloudWatch日志,搜索ERROR级别的报错,可直接定位是网络不通、权限不足、还是路径匹配错误
- 也可通过临时Glue作业直接测试JDBC连接,参考代码:
import sys from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session # 替换为实际连接信息 df = spark.read.format("jdbc") \ .option("url", "jdbc:oracle:thin:@//10.0.0.1:1521/ORCL") \ .option("dbtable", "HR.EMPLOYEES") \ .option("user", "oracle_user") \ .option("password", "oracle_password") \ .option("driver", "oracle.jdbc.OracleDriver") \ .load() df.show(5)
如果作业可正常输出表数据,说明连接链路无问题,需排查爬虫本身配置;如果作业报错,根据报错信息修正对应配置即可。
内容的提问来源于stack exchange,提问作者Selva
相关产品推荐
相关产品推荐

