我如何解决使用 JDBC/ODBC 驱动程序连接到 Amazon Athena 时出现的“与 Amazon Athena 通信时出错”的问题?

上次更新时间:2021 年 5 月 5 日

当我将 Amazon Athena 与 Java Database Connectivity (JDBC)/Open Database Connectivity (ODBC) 驱动程序结合使用时,我遇到了连接超时问题。

-或者-

我无法在我的商业智能工具上看到 Athena 查询结果。

解决方法

该错误的最常见原因是,您安装 JDBC/ODBC 驱动程序的主机与 Athena 或 AWS Glue 终端节点之间存在连接问题。

要对此错误进行故障排除,请检查您安装 JDBC/ODBC 驱动程序的主机与 Athena/AWS Glue 之间的连接。

连接到 Athena

您的主机可以通过 Athena 公有服务终端节点或 Athena 私有终端节点连接到 Athena。有关设置终端节点的更多信息,请参阅命令行选项Boto3 文档

  • Athena 通过端口 443 连接到主机。
  • Athena 的流式 API 使用端口 444 来流式传输查询结果。当您使用 JDBC/ODBC 驱动程序时,Athena 使用此端口将查询结果流式传输到安装在客户端主机上的 JDBC/ODBC 驱动程序。因此,当您需要通过 JDBC/ODBC 驱动程序连接到 Athena 时,请解锁此端口。如果此端口被封锁,则在运行查询时,您的商业智能工具可能会超时或无法显示查询结果。

Athena 公有区域终端节点

如果您使用的是 Athena 公有服务终端节点(例如:athena.us-east-1.amazonaws.com),请务必根据您尝试连接的区域更新终端节点。

  • 如果您使用的是 Windows,请使用 TelnetTest-netconnection 来测试与 Athena 公有终端节点的连接。
    注意:您可以使用类似的命令来测试与端口 444 的连接。
telnet athena.us-east-1.amazonaws.com 443

--或者--

Test-NetConnection -Computer_Name athena.us-east-1.amazonaws.com -Port 443
  • 如果您使用的是 Linux 或 MAC 操作系统,请运行类似以下内容的命令来检查 Athena 的连接。
    注意:您可以使用类似的命令来测试与端口 444 的连接。
nc -v athena.us-east-1.amazonaws.com 443

Athena 私有接口 VPC 终端节点

  • 如果您使用的是 Athena 私有终端节点而不是公有服务终端节点,请测试与接口 VPC 终端节点的连接。
  • 如果您有终端节点特定的 DNS 主机名,请检查与终端节点特定 DNS 主机名的连接。如果没有,请检查与默认 DNS 主机名的连接。
    • 如果您已开启终端节点的私有 DNS,请将 vpce- .athena.us-east-1.vpce.amazonaws.com 作为主机名。
    • 如果您已关闭终端节点的私有 DNS,请将 athena.us-east-1.amazonaws.com 作为主机名。
  • 如果您使用的是 Windows,则使用以下命令。除了测试端口 443 之外,请务必测试端口 444 的连接。
    注意:如果您在运行 telnet 命令时遇到问题,请使用 Test-NetConnection 来测试连接。
    如果您已关闭终端节点的私有 DNS,则可以使用这些命令。
telnet vpce-<name>.athena.us-east-1.vpce.amazonaws.com 443

--或者--

Test-NetConnection -Computer_Name vpce-<name>.athena.us-east-1.vpce.amazonaws.com -Port 443
  • 如果您使用的是 Linux 或 MAC,请运行类似以下内容的命令来检查 Athena 的连接。如果您的连接成功,那么您可能会收到类似于“连接到 athena.us-east-1.amazonaws.com 端口 443 [tcp/https] 已成功”的消息。
nc -v vpce-<name>.athena.us-east-1.vpce.amazonaws.com 443
  • 根据终端节点的私有 DNS 配置,在您的商业工具配置中使用适当的 JDBC 连接 URL。
    • 如果您已关闭私有 DNS,请使用以下连接字符串:jdbc:awsathena://vpce-.athena.us-east-1.vpce.amazonaws.com:443
    • 如果您以开启私有 DNS,请使用以下连接字符串:jdbc:awsathena://athena.us-east-1.amazonaws.com:443
  • 请确保附加到 VPC 终端节点的安全组允许您安装 JDBC/ODBC 驱动程序的主机的流量入站。
  • 请确保端口 444 没有被封锁。如果您使用 AWS PrivateLink 终端节点连接到 Athena,请确保附加到 AWS PrivateLink 终端节点的安全组对端口 444 上的入站流量开放。Athena 使用端口 444 来流式传输查询结果。如果端口 444 被封锁,则结果不会流式传送回客户端主机。在此情况下,您可能会收到类似于“[Simba] [AthenAjdBC] (100123) 出现错误。列初始化过程中出现异常”的错误消息。 这也可能会导致商业智能工具停止响应并且不显示查询结果。

连接到 AWS Glue

请务必检查您安装 JDBC/ODBC 驱动程序的主机与 AWS Glue 之间的连接。您的主机可以通过 AWS Glue 公有服务终端节点或 AWS Glue 私有服务终端节点连接到 AWS Glue。有关更多信息,请参阅 AWS Glue 服务终端节点。Athena 使用 AWS Glue 数据目录来存储和检索您账户中 Amazon S3 数据的表元数据。因此,您的 JDBC/ODBC 驱动程序需要成功连接到 AWS Glue 目录才能获取表元数据信息。

如果您使用的是 AWS Glue 公有服务终端节点,请使用类似于以下内容的命令来测试连接:

注意:根据您的操作系统,您可能需要使用 Test-netConnection 或 nc 来检查端口的连接。

telnet glue.us-east-1.amazonaws.com 443

如果您使用的是 AWS Glue VPC 接口终端节点,请使用类似于以下内容的命令测试连接:

注意:如果您已关闭终端节点的私有 DNS,请使用以下命令:

telnet vpce-<name>.glue.us-east-1.vpce.amazonaws.com 443

如果您已开启终端节点的私有 DNS,请使用以下命令:

telnet glue.us-east-1.amazonaws.com 443

这篇文章对您有帮助吗?


您是否需要账单或技术支持?