连接到 postgresql:dbserver db 通过 JDBC 连接到 Databricks 时连接被拒绝

Posted

技术标签:

【中文标题】连接到 postgresql:dbserver db 通过 JDBC 连接到 Databricks 时连接被拒绝【英文标题】:Connection refused on connecting to postgresql:dbserver db to Databricks via JDBC connection 【发布时间】:2020-07-01 07:21:18 【问题描述】:

我正在尝试使用 JDBC 连接从数据块连接到本地计算机上的 postgresql 数据库。 *** 中有几个有用的帖子。我正在遵循spark.apache.org 和databricks 网站中的文档中提到的程序。

还有这些帖子:1,2 & 3

在 RStudio 中,我可以通过此脚本连接到 postgresql 数据库:

# Define data base credential ----
psql <- DBI::dbDriver("PostgreSQL")

con <- dbConnect(
  psql,
  dbname = 'mydbname',
  host = 'hostname',
  port = 5444,
  user = 'username',
  password = 'password') 

我正在尝试通过 JDBC 将 postgresql 连接到数据块。我使用了两种方法:

    # method 1
    jdbcHostname = "hostname"
    jdbcDatabase = "mydbname"
    jdbcPort = 5444
    
    
    jdbcUrl = "jdbc:postgresql://0:1/2".format(jdbcHostname, jdbcPort, jdbcDatabase)
    connectionProperties = 
      "user" : "username",
      "password" : "password",
      "driver" : "org.postgresql.Driver"
    
pushdown_query = "SELECT * FROM mytable"
df = spark.read.jdbc(url=jdbcUrl, table= pushdown_query , properties=connectionProperties)

还有这个

#method2
jdbcDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:postgresql://hostname:5444/mydbname") \
    .option("dbtable", "SELECT * FROM schema.mytable") \
    .option("user", "username") \
    .option("password", "password")\
    .load()

但我在两次这样的尝试中都遇到了错误:

Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections

我不明白为什么当我指定localhost:5444 时它会尝试连接到localhost:5432

【问题讨论】:

你为什么要把dbserver放在你的连接字符串中? 它在 Spark Apache spark 文档中,没有 dbserver,错误是连接尝试失败 在您的 RStudio 示例中,您的用户名是 username。在其他人中是user 是的,但是密码和用户名是不同的,相同的,我会编辑我的帖子以避免混淆 【参考方案1】:

我能够通过 JDBC 连接将 Azure Database for PostgreSQL 服务器连接到 Databricks。

您可以尝试以下步骤:

先决条件:

Azure Database for PostgreSQL 服务器 => JDBC 连接字符串

jdbc:postgresql://server_name.postgres.database.azure.com:5432/your_database?user=Admin_username&password=your_password&sslmode=require

第 1 步: 连接信息

driver = "org.postgresql.Driver"
url = "jdbc:postgresql://cheprapostgresql.postgres.database.azure.com:5432/postgres?user=chepra@cheprapostgresql&password=XXXXXXXXXXXXXX&sslmode=require"
dbname = "postgres"
dbtable = "inventory"

第 2 步:读取数据

jdbcDF = spark.read \
    .format("jdbc") \
    .option("driver", driver)\
    .option("url", url)\
    .option("dbname", dbname) \
    .option("dbtable", dbtable)\
    .load()

参考:此notebook 向您展示了如何使用 Spark SQL 从 JDBC 数据库加载数据。

【讨论】:

【参考方案2】:

例如检查 intelij "application.properties" 中的以下文件:

特别是:用户名、密码、端口(本例:5432),并确保您之前确实按其名称(本例:'student')创建了数据库,并且它与以下行一致,例如:

spring.datasource.url=jdbc:postgresql://localhost:5432/student
spring.datasource.username=
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect = `org.hibernate.dialect.PostgreSQLDialect`
spring.jpa.properties.hibernate.format_sql = true

server.error.include-message=always

【讨论】:

问题是关于 Spark,而不是 Spring 我想我以某种方式错过了它。谢谢你纠正我。

以上是关于连接到 postgresql:dbserver db 通过 JDBC 连接到 Databricks 时连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

systemd 服务无法连接到会话 d-bus

CVLC 无法连接到 D-Bus 会话

flyway 无法连接到 docker-entrypoint-initdb.d 脚本中的 postgres 容器

将标准输入管道连接到 cURL 标头

关于xshell无法连接到centos的问题

如何连接到项目文件夹内的数据库