连接到 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 时连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章