使用 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 导入数据的主要内容,如果未能解决你的问题,请参考以下文章

怎么用spark 将mysql数据导入 hive

将大数据从 Hadoop 导入 Spark 的有效方法

从另一个数据库导入 Spark 2 的对象的类型是啥? [复制]

使用 sqoop 将数据从 oracle 导入到 hdfs

Oracle使用sqlldr导入多文件到多个表

使用 sqoop 从 Oracle 到 hive 的日期导入问题