【问题标题】:Error Connecting to Redshift from Spark on Databricks从 Databricks 上的 Spark 连接到 Redshift 时出错
【发布时间】:2016-08-01 12:27:24
【问题描述】:

我正在尝试从 Spark 连接到 Redshift(在 Databricks 上运行)

from pyspark.sql import SQLContext

sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", ACCESS_KEY)
sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", SECRET_KEY)

# IP addresses from Redshift Security Group panel
IP_ADDRESSES_TO_ADD = ["1.2.3.4/32", "5.6.7.8/32"]
PORTS_TO_ADD = ["80", "443"]
PROTOCOLS_TO_ADD = ["tcp"]

# Read data from a query
df = sqlContext.read \
    .format("com.databricks.spark.redshift") \
    .option("url", "jdbc:redshift://XXX.XXX.eu-west-1.redshift.amazonaws.com:5439/REDSHIFT_DB?user=REDSHIFT_USER&password=REDSHIFT_PW&ssl=true&sslfactory=com.amazon.redshift.ssl.NonValidatingFactory") \
    .option("query", "select * FROM REDSHIFT_TABLE LIMIT 10") \
    .option("tempdir", "s3n://path/to/temp/") \
    .load()

但是我收到以下错误:

java.sql.SQLException: [Amazon](500150) Error setting/closing connection: Connection timed out.

我错过了什么吗?

【问题讨论】:

  • 检查红移的入口规则,并确保它允许从您运行脚本的 ip 访问。

标签: amazon-web-services amazon-s3 apache-spark pyspark amazon-redshift


【解决方案1】:

看起来像是连接错误。请验证您是否是授权用户。

要验证这一点: 运行以下命令:

telnet XXX.XXX.eu-west-1.redshift.amazonaws.com 5439

你应该得到这样的东西(如果你是授权用户):

Trying <IP address>...
Connected to <Host name>.
Escape character is '^]'.

但如果你得到:connection time out,则表示你不是授权用户。

【讨论】:

    【解决方案2】:

    您是如何启动 databricks 集群节点的? 是按需提供的吗? 每次集群终止时,您都会在下次启动集群时获得一组新的 IP 地址(EC2 实例)。 因此,您需要确保将新分配的 IP 地址列入白名单以访问 redshift(入站规则)

    【讨论】:

      猜你喜欢
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2018-06-23
      • 1970-01-01
      相关资源
      最近更新 更多