如何解决 Amazon EMR 中的“Timeout waiting for connection from pool”错误?

上次更新时间:2021 年 7 月 13 日

我在 Amazon EMR 中的 Apache Hadoop 作业执行失败,显示错误消息“Timeout waiting for connection from pool”。

解决方法

此错误通常会在您达到了 Amazon EMR File System (EMRFS) 的 Amazon Simple Storage Service (Amazon S3) 连接限制时发生。如要解决此错误,请增加 fs.s3.maxConnections 属性的值。您可以在集群运行时或创建新集群时进行此项操作。

增加正在运行的集群的 fs.s3.maxConnections 值

1.    使用 SSH 连接到主节点

2.    运行以下命令以 sudo 方式打开 emrfs-site.xml 文件。该文件位于 /usr/share/aws/emr/emrfs/conf 目录中。

sudo vi /usr/share/aws/emr/emrfs/conf/emrfs-site.xml

3.    将 fs.s3.maxConnections 属性设置为一个大于 50 的值。在下例中,该值设置为 100。根据应用程序所需的并发 S3 连接数量,您可能需要选择更高的值。
注意:如果您启动使用 Apache HBase 的集群,则 fs.s3.maxConnections 值将默认设置为 1000。如果增加 fs.s3.maxConnections 的值未能解决此超时错误,则检查您的应用程序是否有连接泄露情况。

<property>
  <name>fs.s3.maxConnections</name>
  <value>100</value>
</property>

4.    对所有核心节点和任务节点重复第 2 步和第 3 步。使用您在主节点上所用的相同 fs.s3.maxConnections 值。
注意:使用 Amazon EMR 5.21.0 及更高版本,您可以重新配置集群应用程序并为正在运行的集群中的每个实例组指定其他配置分类。有关更多信息,请参阅为正在运行的集群重新配置实例组

5.    再次运行 Hadoop 作业。您的应用程序必须使用新的 fs.s3.maxConnections 值且无需重启服务。

增加新集群的 fs.s3.maxConnections 值

如要在启动新集群时设置所有节点的 fs.s3.maxConnections 属性值,则需要使用与下面类似的配置对象。有关更多信息,请参阅配置应用程序

[
    {
      "Classification": "emrfs-site",
      "Properties": {
        "fs.s3.maxConnections": "100",
      }
    }
 ]

这篇文章对您有帮助吗?


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