You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向Dataproc提交PySpark任务前,如何启用外部PostgreSQL连接?

问题描述

我有一个要提交至Dataproc的PySpark文件,代码如下:

try:
    print("Start writing")
    url = "jdbc:postgresql://some-ip:5432/postgres"
    properties = {
        "driver": "org.postgresql.Driver",
        "user": "postgres",
        "password": "root"
    }
    df.write.jdbc(url=url, table="result", mode="overwrite", properties=properties)

except Exception as e:
    print(e)
    sc.stop()

使用postgresql-42.6.0.jar JDBC驱动,数据库为PostgreSQL 14。提交任务时出现连接超时错误,核心报错信息:

An error occurred while calling o86.jdbc.
: org.postgresql.util.PSQLException: The connection attempt failed.
...
Caused by: java.net.SocketTimeoutException: connect timed out

提交任务的命令:

gcloud beta dataproc jobs submit pyspark gs://taro-de-intern/pyspark_postgresql.py\
  --cluster my-cluster \
  --jars gs://my-bucket/postgresql-42.6.0.jar

已尝试降级驱动至42.4.2,修改PySpark写入JDBC的代码格式(改用.format("jdbc")链式调用),但均出现相同的连接超时错误。


解决方案

连接超时属于网络层面问题,与JDBC驱动版本、代码写法无关,按以下步骤排查解决:

1. 验证PostgreSQL的网络可达性

登录Dataproc集群的主节点,执行命令测试与目标PostgreSQL的连通性:

# 用nc测试端口连通性
nc -zv some-ip 5432
# 或用telnet测试
telnet some-ip 5432

如果命令返回连接失败/超时,说明网络不通,直接进入步骤2;如果能连通,再检查PostgreSQL的服务配置。

2. 调整PostgreSQL的访问控制

  • 防火墙规则:确保PostgreSQL所在服务器的防火墙开放5432端口,并且允许Dataproc集群所在的IP段/子网访问。如果是GCP Cloud SQL,需在Cloud SQL的「连接」设置中,添加Dataproc集群的公网IP或VPC网络到授权列表。
  • PostgreSQL配置文件:
    修改postgresql.conf,设置listen_addresses = '*'(允许所有IP访问,或指定Dataproc集群的IP段),重启PostgreSQL服务。
    修改pg_hba.conf,添加允许Dataproc集群IP段的访问规则,例如:
    host    all             all             <dataproc-subnet-cidr>/24    md5
    
    重启PostgreSQL使配置生效。

3. 检查Dataproc集群的网络配置

  • 如果PostgreSQL部署在私有网络中,确保Dataproc集群与PostgreSQL在同一个VPC,或已配置VPC peering。
  • 若使用GCP Cloud SQL,优先采用私有IP连接,避免公网传输的不稳定;或在Dataproc集群中部署Cloud SQL Auth Proxy代理连接,提升连通性与安全性。

4. 排查中间网络障碍

  • 检查是否有企业级防火墙、代理服务器阻止了Dataproc集群的出站请求到5432端口。
  • 确认PostgreSQL服务处于运行状态,且监听端口为默认的5432(可通过netstat -tulpn | grep 5432验证)。

内容的提问来源于stack exchange,提问作者Wasin Phaijith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 22:39:53