使用 Spark 从 Oracle 导入数据
Posted
技术标签:
【中文标题】使用 Spark 从 Oracle 导入数据【英文标题】:Import Data from Oracle using Spark 【发布时间】:2018-09-27 18:08:18 【问题描述】:在 Databricks 中,我使用以下代码从 Oracle 中提取数据。
%scala
val empDF = spark.read
.format("jdbc")
.option("url", "jdbc:oracle:thin:username/password//hostname:port/sid")
.option("dbtable", "EMP")
.option("user", "username")
.option("password", "password")
.option("driver", "oracle.jdbc.driver.OracleDriver")
.load()
我收到以下错误:
java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
ojdbc6.jar
作为库附加到集群。
我需要连接到 Oracle 来读取表数据。该表也有 BLOB 数据。
【问题讨论】:
为什么有username/password
这个网址?另外,可能是以后的问题,sid
应该是服务名称,当然可以是一样的。
使用 jdbc:oracle:@//hostname:port/sid 。另外,一些主机名存在与 Spark 工作人员的 DNS 解析问题,解决方案是将它们添加到 Spark 已知主机或直接使用 IP 地址主机名
我将首先使用 Oracle 数据库上的端口进行 telnet 测试,从我运行 spark 应用程序表单的地方开始。 Spark驱动程序可以在任何节点上运行,所以最好从随机节点进行telnet测试。
【参考方案1】:
首先,您应该通过以下方式仔细检查您的 Apache Spark™ 集群是否可以通过网络访问您的 Oracle 数据库:
%sh
telnet <host> <port>
我假设您的 Oracle 实例也在您的云帐户中运行。您可能需要进行 VPC 对等互连(如果在 AWS 上)以允许 Databricks 的集群与另一个 VPC 中的数据库实例之间建立连接以进行私有访问。如果没有隐私问题,可以通过安全组设置向世界开放。
其次,您的 jdbc URL 可能不正确。请查看此sample oracle connection,以及此jdbc connection guide。
【讨论】:
以上是关于使用 Spark 从 Oracle 导入数据的主要内容,如果未能解决你的问题,请参考以下文章