当将 Iceberg 与 EMR 7.0.0 和 s3 一起使用时,我收到 awssdk SdkClientException: 等待来自池的连接超时

问题描述 投票:0回答:1

我最近将 EMR 切换到标签 7.0.0。我的部分工作量是使用 pyspark 对大型 Iceberg 表进行一些更新。我将所有 s3 路径移至 s3 架构,而不是按照建议的 s3a here

以前,Amazon EMR 使用 s3n 和 s3a 文件系统。虽然两者仍然有效,但我们建议您使用 s3 URI 方案以获得最佳性能、安全性和可靠性。

运行 Iceberg 作业时出现此错误:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 4217 in stage 4.0 failed 4 times, most recent failure: Lost task 4217.3 in stage 4.0 (TID 5632) (ip-10-5-7-244.us-east-2.compute.internal executor 48): software.amazon.awssdk.core.exception.SdkClientException: Unable to execute HTTP request: Timeout waiting for connection from pool
at software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.build(SdkClientException.java:111)
amazon-web-services amazon-s3 pyspark amazon-emr apache-iceberg
1个回答
0
投票

遇到此错误的原因是由于连接池耗尽,S3 的传入请求数量超过了连接池的容量,导致尝试从池中租用连接时超时。如果您有多个线程尝试同时访问 S3,并且连接管理不正确或超出池大小,则连接争用可能会导致超时。

本例是由于大量并发的 Iceberg 任务访问 S3 造成的。可用连接数由属性控制

http-client.apache.max-connections

EMR 7.0.0 中的默认值为 50。您可以将此属性添加到 Spark 作业中来增加它:

--conf spark.sql.catalog.{ice_catalog}.http-client.apache.max-connections=3000

其中

{ice_catalog}
是您的目录名称。

© www.soinside.com 2019 - 2024. All rights reserved.