EMR 上的 spark-redshift 连接超时异常

Connection timed out exception with spark-redshift on EMR

我正在使用数据块提供的 spark-redshift 库从 Spark 中的 redshift table 读取数据。 Link: https://github.com/databricks/spark-redshift.

注意:redshift 集群和 EMR 集群的 AWS 账户在我的例子中是不同的。

我可以在 Spark LOCAL 模式下使用 spark-redshift 连接到 redshift。但相同的代码在 EMR 上失败,出现以下异常:java.sql.SQLException:错误 setting/closing 连接:连接超时。

我已经尝试在我的 EMR 集群的 EC2 安全组的入站规则中添加 Redshift,但它没有帮助。我在执行此操作时使用了 Source 作为 MyIP。

我使用 VPC 对等找到了解决方案:http://docs.aws.amazon.com/AmazonVPC/latest/PeeringGuide/Welcome.html

我们使用 VPC 对等连接 redshift 和 EMR VPC,并更新了各个 VPC 的路由表以接受来自另一个 VPC 的 IPv4 CIDR 的流量。 VPC 对等也可以跨 AWS 账户完成。请参阅上面的 link 以获取更多详细信息。

完成后,转到两个帐户中的 VPC 对等连接,并从对等 VPC 启用 DNS 解析。为此,select VPC 对等连接 -> 转到顶部的“操作”选项 -> Select 编辑 DNS 设置 -> Select 允许来自对等 VPC 的 DNS 解析。

我处于类似情况,而是在 EMR 集群的 EC2 安全组的入站规则中添加 Redshift,请将 EMR 集群的 public IP 添加到 redshift 的安全组,这对我有用。希望这可以帮助!