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

Posted

技术标签:

【中文标题】EMR 上的 spark-redshift 连接超时异常【英文标题】:Connection timed out exception with spark-redshift on EMR 【发布时间】:2017-07-07 10:01:10 【问题描述】:

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

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

我可以在 Spark LOCAL 模式下使用 spark-redshift 连接到 redshift。但是相同的代码在 EMR 上失败,并出现以下异常:java.sql.SQLException: Error setting/closeing connection: Connection timed out。

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于EMR 上的 spark-redshift 连接超时异常的主要内容,如果未能解决你的问题,请参考以下文章

在 V4/孟买/法兰克福地区使用 Spark-Redshift 连接器时出错

EMR LinkageError 上的 Spark + Cassandra

如何在 Amazon EMR 上将连接器添加到 presto

pyspark 代码在控制台中工作,但不在 zeppelin 中

如何将 EMR 生成的 S3 上的小文件与数千个 reducer 合并

Jupyter + EMR + Spark - 从本地机器上的 Jupyter notebook 连接到 EMR 集群