【问题标题】:Databricks Reading Only metadata from JDBC Source but not DataDatabricks 仅从 JDBC 源读取元数据,但不读取数据
【发布时间】:2020-11-10 20:15:57
【问题描述】:

尝试了不同的方法

sql

  CREATE TABLE oracle_table
  USING org.apache.spark.sql.jdbc
  OPTIONS (
    dbtable 'persons',
    driver 'oracle.jdbc.driver.OracleDriver',
    user '<user>',
    password '<pass>',
    url 'jdbc:oracle:thin://@<host>:1521/orcl')

以上代码返回正常

select * from oracle_table

抛出 java.sql.SQLRecoverableException:IO 错误:网络适配器无法建立连接

蟒蛇

jdbcUrl = "jdbc:oracle:thin:@<host>:1521/orcl"
properties = {
    "user": "<user>",
    "password": "<password>",
    "driver": "oracle.jdbc.driver.OracleDriver" 
}

pushdown_query = "( SELECT * FROM persons ) emp_alias"
df = spark.read.jdbc(url=jdbcUrl, table=pushdown_query, properties=properties)
df.printSchema()

返回

 |-- PERSON_ID: decimal(38,10) (nullable = true)
 |-- FIRST_NAME: string (nullable = true)
 |-- LAST_NAME: string (nullable = true)

但是对于下面的代码

df.show()

抛出 java.sql.SQLRecoverableException:IO 错误:网络适配器无法建立连接

帮帮我!

【问题讨论】:

  • CREATE TABLE 会直接跑掉吗?它可能是“延迟加载”,这意味着它在您实际从中选择之前不会运行。所以很可能问题实际上出在您的创建表中,而您的数据块实际上无法连接到&lt;host&gt;:1521。您确定您的数据块安装与 Oracle 服务器有网络连接吗?
  • 最初我遇到了连接错误,我已经更新了天蓝色的入站和出站规则,然后它能够​​从表DESCRIBE persons 加载元数据,如果存在连接问题,它还提供所有列和数据类型也不应该加载元数据!,这让我很困惑
  • @ChandraPrakash 您可以查看此处讨论的类似问题:stackoverflow.com/questions/52542816/…
  • %sh telnet 技巧非常方便,我必须记住那个
  • 我发现问题防火墙仅对数据块的主节点启用,并且工作人员在私有 IP 中。这就是为什么我能够获取元数据但不能获取数据

标签: oracle pyspark apache-spark-sql azure-databricks


【解决方案1】:

根据原帖者的评论分享答案:

我发现问题防火墙仅针对数据块的主节点启用,并且工作人员在私有 IP 中。这就是为什么我能够获取元数据但不能获取数据的原因。

【讨论】:

  • 可以建议我如何解决这个问题,我无法为这些节点启用防火墙,我能够获得主节点的公共 IP 但不能获得工作节点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
相关资源
最近更新 更多